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

好郁闷啊~~一直WA,那位兄弟给我看下程序,测试下数据~~(在线等回复)

Posted by MSaru at 2006-07-14 11:37:36 on Problem 1703
#include <iostream>

using namespace std;

const int MAX = 100000;

bool used[MAX+1];

struct Node
{
    int parent;
    int rank;  
    int opposite;
    
} node[MAX+1];    

int collapseFind(int x)
{
    if(!node[x].parent) return x;
    return node[x].parent = collapseFind(node[x].parent);
}    

int  weightUnion(int x, int y)
{

    if(node[x].rank == node[y].rank)
       node[x].rank++;
    
    return node[x].rank < node[y].rank?node[x].parent = y:node[y].parent = x;

//  node[x].parent = y;
// // cout << "node "<< x << " " << "parent " << y << endl;
  
}    


void combine(int a, int b)
{
	if (node[a].opposite != b) 
    {
		  int		n = node[b].opposite ?  weightUnion(a, node[b].opposite) : a;
		  int		m = node[a].opposite ?  weightUnion(b, node[a].opposite) : b;

		  node[n].opposite = m;
	      node[m].opposite = n;
    }		
}    


void solve()
{
    char t[10], en;
    int n, m;
    int a, b;
    
    cin >> n >> m;
    //scanf("%d", &en);
    memset(node, 0, sizeof(Node)*(n+1));
    memset(used, 0, sizeof(bool)*(n+1));
                     
    for(int i = 1; i <= m; i++)
    {
        scanf("%s %d %d", &t, &a, &b);
        if(t[0] == 'D') { used[a] = used[b] = true; }

        int c = collapseFind(a);
        int d = collapseFind(b);
        
        if(t[0] == 'A')
        {
            if(!used[c] || !used[d])
            cout << "Not sure yet." << endl;
            else
            {
                        if(c == d) cout << "In the same gang." << endl;
                        else
                                   cout << "In different gangs." << endl;
            }    
        }    
        
        if(t[0] == 'D')  { combine(c, d); continue; }

        
    }    
}    
int main()
{
    int times;
    scanf("%d\n", &times);
    
    while(times--)
    {
        solve();

    }    
    
    //while(1);
    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