欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

poj2492并查集

程序员文章站 2022-05-28 19:33:46
并查集,思路:将和bug i interact(我觉得“性交”会有误会)的归为一类,看同类的是否有interact行为(性行为),如果有输出suspicious bugs f...

并查集,思路:将和bug i interact(我觉得“性交”会有误会)的归为一类,看同类的是否有interact行为(性行为),如果有输出suspicious bugs found!

 

[html] 
#include <iostream> 
using namespace std; 
 
class node 

public: 
    node() 
    { 
        nodeid=0; 
        parent=null; 
        rank=0; 
    } 
    node(int id) 
    { 
        nodeid=id; 
        parent=null; 
        rank=0; 
    } 
    int nodeid; 
    node* parent; 
    int rank; 
}; 
 
void makeset(node* node) 

    node->parent=node; 
    node->rank=0; 

 
void linksets(node* node1,node* node2) 

    if(node1->rank>node2->rank) 
    { 
        node2->parent=node1; 
    } 
    else if(node1->rank<node2->rank) 
    { 
        node1->parent=node2; 
    } 
    else 
    { 
        node1->parent=node2; 
        node2->rank++; 
    } 
    return ; 

 
node* findsets(node* node) 

    if(node->parent!=node) 
    { 
        node->parent=findsets(node->parent); 
    } 
    return node->parent; 

 
 
void unionsets(node* node1,node* node2) 

    linksets(findsets(node1),findsets(node2)); 

 
int main() 

    node* pnode[2002]; 
    node* plinknode[2002]; 
    int iscenario,icount; 
    cin>>iscenario; 
    icount=1; 
    while(icount<=iscenario) 
    { 
        int inumber,iinteraction; 
        scanf("%d%d",&inumber,&iinteraction); 
        for(int i=0;i<inumber;i++) 
        { 
            pnode[i]=new node(i+1); 
            makeset(pnode[i]); 
            plinknode[i]=null; 
        } 
        bool flag=true; 
        int ibug1,ibug2; 
        for(int i=0;i<iinteraction;i++) 
        { 
            scanf("%d%d",&ibug1,&ibug2); 
            if(findsets(pnode[ibug1-1]) != findsets(pnode[ibug2-1]) ) 
            { 
                if(plinknode[ibug1-1]==null) 
                { 
                    plinknode[ibug1-1]=pnode[ibug2-1]; 
                } 
                else 
                { 
                    unionsets(pnode[ibug2-1],plinknode[ibug1-1]); 
                } 
 
                if(plinknode[ibug2-1]==null) 
                { 
                    plinknode[ibug2-1]=pnode[ibug1-1]; 
                } 
                else 
                { 
                    unionsets(plinknode[ibug2-1],pnode[ibug1-1]); 
                } 
            } 
            else 
            { 
                flag=false; 
            } 
        } 
        printf("scenario #%d:\n",icount); 
        if(flag==false) 
        {    
            printf("suspicious bugs found!\n\n"); 
        } 
        else 
        { 
            printf("no suspicious bugs found!\n\n"); 
        } 
 
 
        icount++; 
    } 

作者:qiul12345