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