mirror of
https://github.com/Kiritow/OJ-Problems-Source.git
synced 2024-03-22 13:11:29 +08:00
commit
feb6ba9c06
130
HDOJ/1010.cpp
Normal file
130
HDOJ/1010.cpp
Normal file
|
@ -0,0 +1,130 @@
|
|||
/// TLE -> WA
|
||||
#include <cstdio>
|
||||
#include <cstdlib>
|
||||
#include <cstring>
|
||||
#include <algorithm>
|
||||
using namespace std;
|
||||
|
||||
#define MAXN 10
|
||||
#define MAXM 10
|
||||
|
||||
char map[MAXN][MAXM];
|
||||
|
||||
int N,M,T;
|
||||
|
||||
inline void init()
|
||||
{
|
||||
memset(map,0,MAXN*MAXM);
|
||||
}
|
||||
|
||||
inline bool checkmap()
|
||||
{
|
||||
int wall=0;
|
||||
for(int i=0;i<MAXN;i++)
|
||||
{
|
||||
for(int j=0;j<MAXM;j++)
|
||||
{
|
||||
if(map[i][j]=='X') ++wall;
|
||||
}
|
||||
}
|
||||
if(N*M-wall<=T)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
else
|
||||
{
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
void findSD(int* pSx,int* pSy,int* pDx,int* pDy)
|
||||
{
|
||||
for(int i=0;i<MAXN;i++)
|
||||
{
|
||||
for(int j=0;j<MAXM;j++)
|
||||
{
|
||||
switch(map[i][j])
|
||||
{
|
||||
case 'S':
|
||||
*pSx=i;*pSy=j;
|
||||
break;
|
||||
case 'D':
|
||||
*pDx=i;*pDy=j;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
int startx,starty,endx,endy;
|
||||
bool endflag;
|
||||
void DFS(int x,int y,int step)
|
||||
{
|
||||
if(endflag) return;
|
||||
if(x<1||x>N||y<1||y>M) return;
|
||||
if(x==endx&&y==endy&&step==T)
|
||||
{
|
||||
endflag=true;
|
||||
return;
|
||||
}
|
||||
/// TLE? Try this
|
||||
int temp=T-step-(abs(endx-x)+abs(endy-y));
|
||||
if(temp<0||temp%2)
|
||||
{
|
||||
return;
|
||||
}
|
||||
if(map[x-1][y]=='.'||map[x-1][y]=='D')
|
||||
{
|
||||
map[x-1][y]='X';
|
||||
DFS(x-1,y,step+1);
|
||||
map[x-1][y]='.';
|
||||
}
|
||||
if(map[x+1][y]=='.'||map[x+1][y]=='D')
|
||||
{
|
||||
map[x+1][y]='X';
|
||||
DFS(x+1,y,step+1);
|
||||
map[x+1][y]='.';
|
||||
}
|
||||
if(map[x][y-1]=='.'||map[x][y-1]=='D')
|
||||
{
|
||||
map[x][y-1]='X';
|
||||
DFS(x,y-1,step+1);
|
||||
map[x][y-1]='.';
|
||||
}
|
||||
if(map[x][y+1]=='.'||map[x][y+1]=='D')
|
||||
{
|
||||
map[x][y+1]='X';
|
||||
DFS(x,y+1,step+1);
|
||||
map[x][y+1]='.';
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
int main()
|
||||
{
|
||||
while(scanf("%d %d %d",&N,&M,&T)==3&&N+M+T!=0)
|
||||
{
|
||||
init();
|
||||
for(int i=1;i<=N;i++)
|
||||
{
|
||||
scanf("%s",&map[i][1]);
|
||||
}
|
||||
if(!checkmap())
|
||||
{
|
||||
printf("NO\n");
|
||||
continue;
|
||||
}
|
||||
findSD(&startx,&starty,&endx,&endy);
|
||||
endflag=false;
|
||||
DFS(startx,starty,0);
|
||||
if(endflag)
|
||||
{
|
||||
printf("YES\n");
|
||||
}
|
||||
else
|
||||
{
|
||||
printf("NO\n");
|
||||
}
|
||||
}
|
||||
return 0;
|
||||
}
|
73
HDOJ/1010_csdn.cpp
Normal file
73
HDOJ/1010_csdn.cpp
Normal file
|
@ -0,0 +1,73 @@
|
|||
#include <iostream>
|
||||
#include <cstring>
|
||||
using namespace std;
|
||||
char a[10][10];
|
||||
int n,m,t;
|
||||
int sx,sy,ex,ey;
|
||||
bool flag;
|
||||
int dir[4][2]={0,1,1,0,0,-1,-1,0};
|
||||
int abs(int x)
|
||||
{
|
||||
return x<0?-x:x;
|
||||
}
|
||||
void DFS(int x,int y,int time)//当前位置坐标(x,y),到目前位置消耗时间
|
||||
{
|
||||
if(x<0||x>=n||y<0||y>=m)
|
||||
return;
|
||||
if(x==ex&&y==ey&&time==t)
|
||||
{
|
||||
flag =true;
|
||||
return ;
|
||||
}
|
||||
if(flag)
|
||||
return;
|
||||
int temp=(t-time)-(abs(x-ex)+abs(y-ey));
|
||||
if(temp<0||temp&1)
|
||||
return;
|
||||
for(int i=0;i<4;i++)
|
||||
{
|
||||
int xx=x+dir[i][0];
|
||||
int yy=y+dir[i][1];
|
||||
if(a[xx][yy]!='X')
|
||||
{
|
||||
a[xx][yy]='X';
|
||||
DFS(xx,yy,time+1);
|
||||
a[xx][yy]='.';
|
||||
if(flag)
|
||||
return ;
|
||||
}
|
||||
}
|
||||
}
|
||||
int main()
|
||||
{
|
||||
while(cin>>n>>m>>t)
|
||||
{
|
||||
if(n==0&&m==0)
|
||||
break;
|
||||
int wall=0;
|
||||
for(int i=0; i<n; i++)
|
||||
for(int j=0; j<m; j++)
|
||||
{
|
||||
cin>>a[i][j];
|
||||
if(a[i][j]=='S')
|
||||
sx=i,sy=j;
|
||||
else if(a[i][j]=='D')
|
||||
ex=i,ey=j;
|
||||
else if(a[i][j]=='X')
|
||||
wall++;
|
||||
}
|
||||
if(n*m-wall<=t)
|
||||
{
|
||||
cout<<"NO"<<endl;
|
||||
continue;
|
||||
}
|
||||
flag=false;
|
||||
a[sx][sy]='X';
|
||||
DFS(sx,sy,0);
|
||||
if(flag)
|
||||
cout<<"YES"<<endl;
|
||||
else
|
||||
cout<<"NO"<<endl;
|
||||
}
|
||||
return 0;
|
||||
}
|
105
HDOJ/1879.cpp
Normal file
105
HDOJ/1879.cpp
Normal file
|
@ -0,0 +1,105 @@
|
|||
#include <cstdio>
|
||||
#include <cstdlib>
|
||||
#include <cstring>
|
||||
#include <algorithm>
|
||||
#include <vector>
|
||||
#include <queue>
|
||||
using namespace std;
|
||||
|
||||
#define MAXN 105
|
||||
int father[MAXN];
|
||||
int noderank[MAXN];
|
||||
|
||||
void init()
|
||||
{
|
||||
for(int i=0;i<MAXN;i++)
|
||||
{
|
||||
father[i]=i;
|
||||
noderank[i]=0;
|
||||
}
|
||||
}
|
||||
|
||||
int findfather(int node)
|
||||
{
|
||||
if(father[node]!=node)
|
||||
{
|
||||
father[node]=findfather(father[node]);
|
||||
}
|
||||
return father[node];
|
||||
}
|
||||
|
||||
void UNION(int a,int b)
|
||||
{
|
||||
int fa=findfather(a);
|
||||
int fb=findfather(b);
|
||||
if(fa==fb)
|
||||
{
|
||||
return;
|
||||
}
|
||||
if(noderank[fa]>noderank[fb])
|
||||
{
|
||||
father[fb]=fa;
|
||||
}
|
||||
else
|
||||
{
|
||||
father[fa]=fb;
|
||||
if(noderank[fa]==noderank[fb])
|
||||
{
|
||||
noderank[fb]++;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
struct pack
|
||||
{
|
||||
int a,b,v;
|
||||
};
|
||||
#define MAXM 5000
|
||||
pack pk[MAXM];
|
||||
|
||||
bool cmp(const pack& a,const pack& b)
|
||||
{
|
||||
return a.v<b.v;
|
||||
}
|
||||
|
||||
int main()
|
||||
{
|
||||
int N;
|
||||
while(scanf("%d",&N)==1&&N!=0)
|
||||
{
|
||||
init();
|
||||
int cnt=0;
|
||||
int a,b,c,d;
|
||||
int M=(N-1)*N/2;
|
||||
for(int i=0;i<M;i++)
|
||||
{
|
||||
/// Start End Value IsBuilt
|
||||
scanf("%d %d %d %d",&a,&b,&c,&d);
|
||||
if(d)
|
||||
{
|
||||
UNION(a,b);
|
||||
}
|
||||
else
|
||||
{
|
||||
pk[cnt].a=a;
|
||||
pk[cnt].b=b;
|
||||
pk[cnt].v=c;
|
||||
++cnt;
|
||||
}
|
||||
}
|
||||
sort(pk,pk+cnt,cmp);
|
||||
int ans=0;
|
||||
for(int i=0;i<cnt;i++)
|
||||
{
|
||||
int fa=findfather(pk[i].a);
|
||||
int fb=findfather(pk[i].b);
|
||||
if(fa!=fb)
|
||||
{
|
||||
UNION(fa,fb);
|
||||
ans+=pk[i].v;
|
||||
}
|
||||
}
|
||||
printf("%d\n",ans);
|
||||
}
|
||||
return 0;
|
||||
}
|
117
HDOJ/2492_cnblogs.cpp
Normal file
117
HDOJ/2492_cnblogs.cpp
Normal file
|
@ -0,0 +1,117 @@
|
|||
#include <set>
|
||||
#include <map>
|
||||
#include <list>
|
||||
#include <cmath>
|
||||
#include <ctime>
|
||||
#include <deque>
|
||||
#include <queue>
|
||||
#include <stack>
|
||||
#include <cstdio>
|
||||
#include <string>
|
||||
#include <vector>
|
||||
#include <cctype>
|
||||
#include <cstring>
|
||||
#include <sstream>
|
||||
#include <fstream>
|
||||
#include <cstdlib>
|
||||
#include <cassert>
|
||||
#include <iostream>
|
||||
#include <algorithm>
|
||||
|
||||
using namespace std;
|
||||
//Constant Declaration
|
||||
/*--------------------------*/
|
||||
//#define LL long long
|
||||
#define LL __int64
|
||||
const int M=100001;
|
||||
const int INF=1<<30;
|
||||
const double EPS = 1e-11;
|
||||
const double PI = acos(-1.0);
|
||||
/*--------------------------*/
|
||||
// some essential funtion
|
||||
/*----------------------------------*/
|
||||
void Swap(int &a,int &b){ int t=a;a=b;b=t; }
|
||||
int Max(int a,int b){ return a>b?a:b; }
|
||||
int Min(int a,int b){ return a<b?a:b; }
|
||||
int Gcd(int a,int b){ while(b){b ^= a ^=b ^= a %= b;} return a; }
|
||||
/*----------------------------------*/
|
||||
//for (i = 0; i < n; i++)
|
||||
/*----------------------------------*/
|
||||
|
||||
LL c[M];
|
||||
int a[M];
|
||||
int left_lower[M], right_lower[M];//分别是,在第i个数左右边,比第i个数小的个数
|
||||
int n = 100000;
|
||||
|
||||
|
||||
int LowBit(int x)
|
||||
{
|
||||
return x&(-x);
|
||||
}
|
||||
|
||||
int Sum(int k)
|
||||
{
|
||||
int sum = 0;
|
||||
while (k > 0)
|
||||
{
|
||||
sum += c[k];
|
||||
k -= LowBit(k);
|
||||
}
|
||||
return sum;
|
||||
}
|
||||
|
||||
void Update(int k, int sc)
|
||||
{
|
||||
while (k <= 100000)
|
||||
{
|
||||
c[k] += sc;
|
||||
k += LowBit(k);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
int main()
|
||||
{
|
||||
//freopen("in.txt","r",stdin);
|
||||
//freopen("out.txt","w",stdout);
|
||||
int t, case1 = 0;
|
||||
scanf("%d", &t);
|
||||
int m;
|
||||
int i, j;
|
||||
int num;
|
||||
//scanf("%d%d", &n, &m);
|
||||
while (t--)
|
||||
{
|
||||
scanf("%d", &num);
|
||||
memset(c, 0, sizeof(c));
|
||||
memset(left_lower, 0, sizeof(left_lower));
|
||||
memset(right_lower, 0, sizeof(right_lower));
|
||||
for (i = 1; i <= num; i++)
|
||||
{
|
||||
scanf("%d", &a[i]);
|
||||
left_lower[i] += Sum(a[i] - 1);///Sum(a[i] - 1):插入该数前,区间1到a[i]-1的总个数
|
||||
Update(a[i], 1);
|
||||
}
|
||||
|
||||
memset(c, 0, sizeof(c));
|
||||
for (i = num; i > 0; i--)//顺序插入
|
||||
{
|
||||
right_lower[i] += Sum(a[i] - 1);
|
||||
Update(a[i], 1);
|
||||
}
|
||||
|
||||
LL ans = 0;
|
||||
|
||||
for (i = 1; i <= num; i++)//逆序插入
|
||||
{
|
||||
ans += left_lower[i]*(num - i - right_lower[i]);//由于只能求比其小的个数,可以用i右边的总个数见减比他小的来求比他大的个数。
|
||||
ans += (i - 1 - left_lower[i])*right_lower[i];//
|
||||
}
|
||||
|
||||
printf("%I64d\n", ans);
|
||||
}
|
||||
|
||||
|
||||
return 0;
|
||||
}
|
144
HDOJ/3790_cnblogs.cpp
Normal file
144
HDOJ/3790_cnblogs.cpp
Normal file
|
@ -0,0 +1,144 @@
|
|||
#include <set>
|
||||
#include <map>
|
||||
#include <list>
|
||||
#include <cmath>
|
||||
#include <ctime>
|
||||
#include <deque>
|
||||
#include <queue>
|
||||
#include <stack>
|
||||
#include <cstdio>
|
||||
#include <string>
|
||||
#include <vector>
|
||||
#include <cctype>
|
||||
#include <cstring>
|
||||
#include <sstream>
|
||||
#include <fstream>
|
||||
#include <cstdlib>
|
||||
#include <cassert>
|
||||
#include <iostream>
|
||||
#include <algorithm>
|
||||
|
||||
using namespace std;
|
||||
//Constant Declaration
|
||||
/*--------------------------*/
|
||||
//#define LL long long
|
||||
#define LL __int64
|
||||
const int M=1100;//最多点数
|
||||
const int INF=1<<30;
|
||||
const double EPS = 1e-11;
|
||||
const double PI = acos(-1.0);
|
||||
/*--------------------------*/
|
||||
// some essential funtion
|
||||
/*----------------------------------*/
|
||||
void Swap(int &a,int &b){ int t=a;a=b;b=t; }
|
||||
int Max(int a,int b){ return a>b?a:b; }
|
||||
int Min(int a,int b){ return a<b?a:b; }
|
||||
int Gcd(int a,int b){ while(b){b ^= a ^=b ^= a %= b;} return a; }
|
||||
/*----------------------------------*/
|
||||
//for (i = 0; i < n; i++)
|
||||
/*----------------------------------*/
|
||||
|
||||
struct djs
|
||||
{
|
||||
int l,p;
|
||||
}d[M],g[M][M];
|
||||
|
||||
bool used[M];//标记i是否被用过
|
||||
void init(int n)
|
||||
{
|
||||
int i, j;
|
||||
for (i = 1; i <= n; i++)
|
||||
{
|
||||
for (j = 1; j <= n; j++)
|
||||
{
|
||||
g[i][j].l = INF;//初始化图没有边,默认为INF,为了一定更新
|
||||
g[i][j].p = INF;
|
||||
}
|
||||
}
|
||||
for (i = 1; i <= n; i++)
|
||||
{
|
||||
d[i].l = INF;
|
||||
d[i].p = INF;
|
||||
}
|
||||
|
||||
memset(used, 0, sizeof(used));
|
||||
}
|
||||
|
||||
|
||||
|
||||
int dijkstra(int star, int end, int n)//起点,终点,总点数(编号为1,2...n)
|
||||
{
|
||||
int min_num;//最小值的位置
|
||||
int i;
|
||||
d[star].l= 0;
|
||||
d[star].p= 0;//起点到起点的最短距离为0,很重要的一步
|
||||
for (int cnt = 0; cnt < n; cnt++)//注意别用while(n--),这样会改变n的值。n次贪心
|
||||
{
|
||||
int min = INF;
|
||||
for (i = 1; i <= n; i++)
|
||||
{
|
||||
if (!used[i] && d[i].l < min)
|
||||
{
|
||||
min = d[i].l;
|
||||
min_num = i;
|
||||
}
|
||||
}
|
||||
|
||||
used[min_num] = 1;
|
||||
|
||||
//把d[min_num]作为中间点,对相邻的点做松弛
|
||||
for (i = 1; i <= n; i++)
|
||||
{
|
||||
if (!used[i] && d[i].l > d[min_num].l + g[min_num][i].l)
|
||||
{
|
||||
d[i].l = d[min_num].l + g[min_num][i].l;
|
||||
d[i].p = d[min_num].p + g[min_num][i].p;
|
||||
}
|
||||
if (!used[i] && d[i].l == d[min_num].l + g[min_num][i].l && d[i].p > d[min_num].p + g[min_num][i].p)//这里的判断是关键
|
||||
{
|
||||
d[i].p = d[min_num].p + g[min_num][i].p;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
return d[end].l;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
int main()
|
||||
{
|
||||
//freopen("in.txt","r",stdin);
|
||||
//freopen("out.txt","w",stdout);
|
||||
//int t, case1 = 0;
|
||||
//scanf("%d", &t);
|
||||
int n, m;
|
||||
int i, j;
|
||||
while (scanf("%d%d", &n, &m), n + m)
|
||||
{
|
||||
init(n);
|
||||
for (i = 0; i < m; i++)
|
||||
{
|
||||
int a, b, c, c1;
|
||||
scanf("%d%d%d%d", &a, &b, &c, &c1);
|
||||
if (g[a][b].l > c)
|
||||
{
|
||||
g[b][a].l = g[a][b].l = c;
|
||||
g[b][a].p= g[a][b].p = c1;
|
||||
}//此题为无向图
|
||||
if (g[a][b].l == c && g[b][a].p > c1)//这里的判断是关键
|
||||
{
|
||||
g[b][a].p= g[a][b].p = c1;
|
||||
}
|
||||
|
||||
}
|
||||
int star, end,ans;
|
||||
scanf("%d%d", &star, &end);
|
||||
ans = dijkstra(star, end, n);
|
||||
printf("%d %d\n", ans, d[end].p);
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
73
HDOJ/4786_cnblogs.cpp
Normal file
73
HDOJ/4786_cnblogs.cpp
Normal file
|
@ -0,0 +1,73 @@
|
|||
#include <iostream>
|
||||
#include <cstdio>
|
||||
#include <cstring>
|
||||
#define maxn 100100
|
||||
using namespace std;
|
||||
|
||||
struct edge{
|
||||
int u,v;
|
||||
}a[2][maxn];
|
||||
|
||||
int s[2];
|
||||
int n,m,c,t,uu,vv,cc,MM,mm,cas=0;
|
||||
int f[maxn],g[maxn];
|
||||
bool flag;
|
||||
|
||||
void init() { for (int i=1; i<=n; i++) f[i]=i; }
|
||||
|
||||
void build(int xx,int yy) { f[f[xx]]=f[yy]; }
|
||||
|
||||
int getf(int x)
|
||||
{
|
||||
if (f[x]!=x) f[x]=getf(f[x]);
|
||||
return f[x];
|
||||
}
|
||||
|
||||
void addedge(int x)
|
||||
{
|
||||
int tot=0;
|
||||
init();
|
||||
for (int i=1; i<=s[x]; i++)
|
||||
if (getf(a[x][i].u)!=getf(a[x][i].v)) tot++,build(a[x][i].u,a[x][i].v);
|
||||
if (x==0) mm=n-1-tot;
|
||||
else MM=tot;
|
||||
}
|
||||
|
||||
int main()
|
||||
{
|
||||
g[1]=1,g[2]=2;
|
||||
for (int i=2; g[i]<=maxn; i++) g[i+1]=g[i]+g[i-1];
|
||||
scanf("%d",&t);
|
||||
while (t--)
|
||||
{
|
||||
scanf("%d%d",&n,&m);
|
||||
s[0]=s[1]=0;
|
||||
for (int i=1; i<=m; i++)
|
||||
{
|
||||
scanf("%d%d%d",&uu,&vv,&cc);
|
||||
a[cc][++s[cc]].u=uu;
|
||||
a[cc][s[cc]].v=vv;
|
||||
}
|
||||
init();
|
||||
for (int i=1; i<=s[0]; i++)
|
||||
if (getf(a[0][i].u)!=getf(a[0][i].v)) build(a[0][i].u,a[0][i].v);
|
||||
for (int i=1; i<=s[1]; i++)
|
||||
if (getf(a[1][i].u)!=getf(a[1][i].v)) build(a[1][i].u,a[1][i].v);
|
||||
flag=true;
|
||||
for (int i=2; i<=n; i++)
|
||||
if (getf(i)!=getf(i-1)) { flag=false; break; }
|
||||
if (!flag)
|
||||
{
|
||||
printf("Case #%d: No\n",++cas);
|
||||
continue;
|
||||
}
|
||||
addedge(0),addedge(1);
|
||||
//cout<<" MM && mm : " <<mm<<' '<<MM<<endl;
|
||||
flag=false;
|
||||
for (int i=1; g[i]<=n; i++)
|
||||
if (g[i]<=MM && g[i]>=mm) { flag=true; break; }
|
||||
if (flag) printf("Case #%d: Yes\n",++cas);
|
||||
else printf("Case #%d: No\n",++cas);
|
||||
}
|
||||
return 0;
|
||||
}
|
50
UVALive/7483.cpp
Normal file
50
UVALive/7483.cpp
Normal file
|
@ -0,0 +1,50 @@
|
|||
/**
|
||||
LINK=
|
||||
http://acm.hust.edu.cn/vjudge/contest/view.action?cid=115784#problem/F
|
||||
*/
|
||||
#include <cstdio>
|
||||
#include <cstdlib>
|
||||
#include <cstring>
|
||||
#include <climits>
|
||||
#include <vector>
|
||||
#include <algorithm>
|
||||
|
||||
using namespace std;
|
||||
|
||||
#define MAXN 105
|
||||
|
||||
int main()
|
||||
{
|
||||
int n;
|
||||
while(scanf("%d",&n)==1)
|
||||
{
|
||||
vector<int> pool[MAXN*2+8];
|
||||
for(int i=0;i<n;i++)
|
||||
{
|
||||
int a,b;
|
||||
scanf("%d %d",&a,&b);
|
||||
pool[a].push_back(b);
|
||||
}
|
||||
int k=INT_MAX;
|
||||
int cnt=0;
|
||||
for(int i=0;i<MAXN*2+8;i++)
|
||||
{
|
||||
if(k<i)
|
||||
{
|
||||
++cnt;
|
||||
k=INT_MAX;
|
||||
}
|
||||
for(int j=0;j<pool[i].size();j++)
|
||||
{
|
||||
k=min(k,pool[i].at(j));
|
||||
}
|
||||
}
|
||||
if(k<INT_MAX)
|
||||
{
|
||||
++cnt;
|
||||
}
|
||||
printf("%d\n",cnt);
|
||||
}
|
||||
/// End of main loop
|
||||
return 0;
|
||||
}
|
29
UVALive/7483_csdn.cpp
Normal file
29
UVALive/7483_csdn.cpp
Normal file
|
@ -0,0 +1,29 @@
|
|||
#include <bits/stdc++.h>
|
||||
using namespace std;
|
||||
|
||||
#define pb push_back
|
||||
|
||||
int main()
|
||||
{
|
||||
int N;
|
||||
while(cin>>N){
|
||||
vector <int> arr[201];
|
||||
for (int i=1;i<=N;i++){
|
||||
int a, b;
|
||||
scanf("%d%d",&a,&b);
|
||||
arr[a].pb(b);
|
||||
}
|
||||
int mn=2e9, ans=0;
|
||||
for (int i=1;i<=N+N;i++){
|
||||
if (mn < i) ans++, mn = 2e9;
|
||||
for(int j=0;j<arr[i].size();j++)
|
||||
{
|
||||
int e=arr[i][j];
|
||||
mn=min(mn,e);
|
||||
}
|
||||
}
|
||||
if (mn < 2e9) ans++;
|
||||
printf("%d\n", ans);
|
||||
}
|
||||
return 0;
|
||||
}
|
2
UVALive/Readme.md
Normal file
2
UVALive/Readme.md
Normal file
|
@ -0,0 +1,2 @@
|
|||
#UVALive
|
||||
[Goto UVa Online Judge](https://uva.onlinejudge.org/ "UVa Online Judge")
|
107
ZOJ/3946_cnblogs.cpp
Normal file
107
ZOJ/3946_cnblogs.cpp
Normal file
|
@ -0,0 +1,107 @@
|
|||
# include<iostream>
|
||||
# include<cstdio>
|
||||
# include<cstring>
|
||||
# include<vector>
|
||||
# include<queue>
|
||||
# include<list>
|
||||
# include<set>
|
||||
# include<map>
|
||||
# include<string>
|
||||
# include<cmath>
|
||||
# include<cstdlib>
|
||||
# include<algorithm>
|
||||
using namespace std;
|
||||
# define LL long long
|
||||
|
||||
const int N=1005;
|
||||
const int INF=1000000000;
|
||||
const LL oo=1000000000000005;
|
||||
|
||||
struct Edge
|
||||
{
|
||||
int to,nxt;
|
||||
LL c,d;
|
||||
};
|
||||
|
||||
int n,m,cnt;
|
||||
Edge e[N*200];
|
||||
LL d[N*100];
|
||||
int head[N*100];
|
||||
vector<int>pre[N*100];
|
||||
|
||||
void add(int u,int v,LL d,LL c)
|
||||
{
|
||||
e[cnt].to=v;
|
||||
e[cnt].d=d;
|
||||
e[cnt].c=c;
|
||||
e[cnt].nxt=head[u];
|
||||
head[u]=cnt++;
|
||||
}
|
||||
|
||||
void solve()
|
||||
{
|
||||
for(int i=0;i<n;++i)
|
||||
pre[i].clear();
|
||||
|
||||
fill(d,d+n,oo);
|
||||
d[0]=0;
|
||||
queue<int>q;
|
||||
q.push(0);
|
||||
while(!q.empty())
|
||||
{
|
||||
int u=q.front();
|
||||
q.pop();
|
||||
for(int i=head[u];i!=-1;i=e[i].nxt){
|
||||
int v=e[i].to;
|
||||
if(d[v]>d[u]+e[i].d){
|
||||
d[v]=d[u]+e[i].d;
|
||||
q.push(v);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
q.push(0);
|
||||
while(!q.empty()){
|
||||
int u=q.front();
|
||||
q.pop();
|
||||
for(int i=head[u];i!=-1;i=e[i].nxt){
|
||||
int v=e[i].to;
|
||||
if(d[v]==d[u]+e[i].d){
|
||||
pre[v].push_back(i);
|
||||
q.push(v);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
LL ans1=0,ans2=0;
|
||||
for(int i=0;i<n;++i){
|
||||
ans1+=d[i];
|
||||
LL minn=oo;
|
||||
for(int j=0;j<pre[i].size();++j)
|
||||
minn=min(minn,e[pre[i][j]].c);
|
||||
if(minn==oo) continue;
|
||||
ans2+=minn;
|
||||
}
|
||||
printf("%lld %lld\n",ans1,ans2);
|
||||
}
|
||||
|
||||
int main()
|
||||
{
|
||||
int T;
|
||||
scanf("%d",&T);
|
||||
while(T--)
|
||||
{
|
||||
scanf("%d%d",&n,&m);
|
||||
cnt=0;
|
||||
memset(head,-1,sizeof(head));
|
||||
int a,b;
|
||||
LL c,d;
|
||||
for(int i=0;i<m;++i){
|
||||
scanf("%d%d%lld%lld",&a,&b,&d,&c);
|
||||
add(a,b,d,c);
|
||||
add(b,a,d,c);
|
||||
}
|
||||
solve();
|
||||
}
|
||||
return 0;
|
||||
}
|
Loading…
Reference in New Issue
Block a user