Online JudgeProblem SetAuthorsOnline ContestsUser
Web Board
Home Page
F.A.Qs
Statistical Charts
Problems
Submit Problem
Online Status
Prob.ID:
Register
Update your info
Authors ranklist
Current Contest
Past Contests
Scheduled Contests
Award Contest
User ID:
Password:
  Register

吼吼,parent[i] = -1改成memset就过了。ft到死。。

Posted by yangguo981 at 2006-10-16 12:45:39 on Problem 1703
In Reply To:R大侠帮忙看看下面的程序为啥wa呢?就是并查集而已呀。 Posted by:yangguo981 at 2006-10-14 00:37:50
> 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:
User ID:
Password:
Title:

Content:

Home Page   Go Back  To top


All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator