题目:
输如若干行,第一行输入人的个数n和存在同乡关系的对数m。后面紧接着是m行(m<n(n-1)/2)这些同乡关系对。判断编号为1的人有多少个同乡。给出n组这样的关系式,判断同乡个数。
代码:
#include <iostream>
#include <string>
#include<vector>
using namespace std;
void process(int n,int g,vector<int> &v){
int* flag=new int[n+1];
for(int i=0;i<n+1;i++)
flag[i]=i;
int p1,p2;
int temp;
for(int i=0;i<g;i++){
cin>>p1>>p2;
if(flag[p1]==1&&flag[p2]!=1){
temp=flag[p2];
for(int j=0;j<n+1;j++)
if(flag[j]==temp)
flag[j]=1;
}
else if(flag[p2]==1&&flag[p1]!=1){
temp=flag[p1];
for(int k=0;k<n+1;k++)
if(flag[k]==temp)
flag[k]=1;
}
else
flag[p1]=flag[p2];
}
int num=0;
for(int i=0;i<n+1;i++){
if(i!=1&&flag[i]==1)
num++;
}
v.push_back(num);
delete []flag;
}
int main(void)
{
int n,g;
vector<int> v;
cin>>n>>g;
while(!(n==0&&g==0)){
process(n,g,v);
cin>>n>>g;
}
for(int i=0;i<v.size();i++)
cout<<v[i]<<endl;
}