http://acm.timus.ru/problem.aspx?space=1&num=1320
ural 的题目倒是挺好的 不过题意一直让人匪夷所思呀 很难懂
题意:给一个图 依次从里面拿走两个相邻的边 问可不可以最后全拿完
并查集 很巧妙 我承认我看了解题报告 自己思维还是不够呀
每个连同块 里面边的个数是偶数就可以 奇数就不可以
代码:
#include<iostream> #include<cstdio> #include<cstring> #include<algorithm> #include<string> #include<vector> #include<map> #include<queue> #include<stack> #include<cmath> #define LL long long //#pragma comment(linker, "/STACK:1024000000,1024000000") using namespace std; const int INF=0x3f3f3f3f; const int N=1005; int f[N]; int num[N]; int findx(int x) { if(f[x]!=x) f[x]=findx(f[x]); return f[x]; } int main() { // freopen("data.txt","r",stdin); for(int i=1;i<N;++i) {f[i]=i;num[i]=0;} int l,r; while(cin>>l>>r) { int fl=findx(l); int fr=findx(r); if(fl==fr) {++num[fr];continue;} num[fr]+=num[fl]+1; f[fl]=fr; } for(int i=1;i<N;++i) { if(f[i]==i&&num[i]%2) {cout<<"0"<<endl;return 0;} } cout<<"1"<<endl; return 0; }