九度 1012

来源:互联网 发布:全国计算机二级vb真题 编辑:程序博客网 时间:2024/06/06 12:39

并查集

#include<iostream>#include<string.h>using namespace std;void merge(int x,int y);int find(int x);#define MAX 1005int m,n;int road[MAX];int a,b;int ans;int main(){        while(cin>>n && n)        {                cin>>m;                memset(road,0,sizeof(road));                ans=n;                while(m--)                {                        cin>>a>>b;                        merge(a,b);                }                cout<<ans-1<<endl;        }        return 0;}void merge(int x,int y){       int f1=find(x);       int f2=find(y);       if(f1!=f2)       {               road[f2]=f1;               ans--;       }}int find(int x){        if(road[x]==0)return x;        road[x]=find(road[x]);        return road[x];}
写的代码永远是伪c++敲打

0 0
原创粉丝点击