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 |
R大侠帮忙看看下面的程序为啥wa呢?就是并查集而已呀。In Reply To:求测试数据或ac的程序,站内~~thanks Posted by:yangguo981 at 2006-10-13 20:32:13 Source Problem Id:1703 User Id:yangguo981 Memory:484K Time:609MS Language:C++ Result:Wrong Answer Source #include <numeric> #include <vector> #include <deque> #include <queue> #include <set> #include <map> #include <string> #include <stack> #include <algorithm> #include <functional> #include <iterator> #include <cmath> #include <iostream> #include <sstream> #include <fstream> #include <list> #include <bitset> using namespace std; typedef pair<int, int> PII; #define BE(a) (a).begin(),(a).end() #define FOR(i,j,k) for((i)=(j); (i)<(k); ++(i)) #define REP(i,n) FOR((i), 0, (n)) #define LENGTH(x) (sizeof((x))/sizeof(((x)[0]))) int T,N,M; int parent[1000001]; //vector<int> parent; PII getRoot(int x){ int level = 0; while(parent[x] >= 0) x = parent[x], ++level; return PII(x, level); } void merge(int x, int y){ int r1 = getRoot(x).first; int r2 = getRoot(y).first; if (r1 == r2) return; int level1 = getRoot(x).second; int level2 = getRoot(y).second; int count1 = parent[r1]; int count2 = parent[r2]; //x->y if (level1 > level2){ int current = x, next = parent[current]; while(next >= 0){ int temp = parent[next]; parent[next] = current; current = next; next = temp; } //parent[next] = current; parent[r2] += count1; parent[x] = y; } //y->x else{ int current = y, next = parent[current]; while(next >= 0){ int temp = parent[next]; parent[next] = current; current = next; next = temp; } //parent[next] = current; parent[r1] += count2; parent[y] = x; } } int main(){ //ifstream cin("1.txt"); cin >> T; while(T--){ //cin >> N >> M; scanf("%d%d",&N,&M); char sign; int a,b,i; REP(i,N) parent[i] = -1; //parent.assign(N, -1); while(M--){ //cin >> sign >> a >> b; cin >> sign;scanf("%d%d",&a,&b); if (sign == 'A'){ PII p1 = getRoot(a); PII p2 = getRoot(b); if (p1.first != p2.first) printf("Not sure yet1.\n"); else if (p1.second%2 == p2.second%2) printf("In the same g1ang.\n"); else printf("In differ2ent gangs.\n"); } else merge(a, b); } } return 0; } Followed by:
Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator