Online Judge | Problem Set | Authors | Online Contests | User | ||||||
---|---|---|---|---|---|---|---|---|---|---|
Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest |
Re:帮忙看看我这个想法对不对啊In Reply To:帮忙看看我这个想法对不对啊 Posted by:Iambitious at 2006-10-23 16:22:28 #include <iostream> #include <cstdio> using namespace std; int same[50001]; int eat[50001]; int eaten[50001]; int par(int cur) { while(same[cur] != cur){ cur = same[cur]; } return cur; }; int merge(int a, int b) { int pa = par(a); int pb = par(b); if(pa < pb){ same[pb] = pa; return pa; } else{ same[pa] = pb; return pb; } }; int main() { int n,k; int which,a,b; int i; int res; freopen("g:\\in.txt","r",stdin); res = 0; scanf("%d%d", &n, &k); for(i = 0; i <= n; i++){ same[i] = i; } memset(eat, 0, n + 1); memset(eaten, 0, n + 1); for(i = 1; i <= k; i++){ scanf("%d%d%d", &which, &a, &b); if(a > n || b > n){ res++; continue; } if(which == 1){ if(par(a) == par(b)){ continue; } if(eat[a] > 0 && par(eat[a]) == par(b)){ res++; continue; } if(eat[b] > 0 && par(eat[b]) == par(a)){ res++; continue; } merge(a,b); if(eat[a] > 0 && eat[b] > 0){ merge(eat[b], eat[b]); } else if(eat[a] > 0){ eat[b] = par(eat[a]); } else if(eat[b] > 0){ eat[a] = par(eat[b]); } if(eaten[a] > 0 && eaten[b] > 0){ merge(eaten[a], eaten[b]); } else if(eaten[a] > 0){ eaten[b] = par(eaten[a]); } else if(eaten[b] > 0){ eaten[a] = par(eaten[b]); } } else if(which == 2){ if(eat[a] > 0 && par(eat[a]) == par(b)){ continue; } if(par(a) == par(b)){ res++; continue; } if(eat[b] > 0 && par(eat[b]) == par(a)){ res++; continue; } if(eat[a] > 0){ merge(eat[a], b); } else{ eat[a] = par(b); } if(eaten[b] > 0){ merge(a, eaten[b]); } else{ eaten[b] = par(a); } if(eaten[a] > 0 && eat[b] > 0){ merge(eaten[a], eat[b]); } else if(eaten[a] > 0){ eat[b] = par(eaten[a]); } else if(eat[b] > 0){ eaten[a] = par(eat[b]); } } } printf("%d\n", res); return 0; } 各位大侠帮我看看哪错了吧,都wa了2周了。谢谢谢谢! Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator