畅通工程
2018-06-17 22:49:29来源:未知 阅读 ()
注意:两个城市之间可以有多条道路相通,也就是说
3 3
1 2
1 2
2 1
这种输入也是合法的
当N为0时,输入结束,该用例不被处理。
1 #include<iostream> 2 #include<cstdio> 3 #include<cstring> 4 using namespace std; 5 int f[1001]; 6 int vis[1001][1001]; 7 int vis2[1001]; 8 int find(int x) 9 { 10 if(x!=f[x]) 11 f[x]=find(f[x]); 12 return x; 13 } 14 void unionn(int x,int y) 15 { 16 int fx=find(x); 17 int fy=find(y); 18 f[fy]=fx; 19 } 20 int dfs(int i) 21 { 22 vis2[i]=1; 23 if(i!=f[i]) 24 { 25 vis2[f[i]]=1; 26 dfs(f[i]); 27 } 28 return i; 29 } 30 31 int main() 32 { 33 int n,m; 34 while(scanf("%d",&n)) 35 { 36 37 memset(vis,0,sizeof(vis)); 38 memset(vis2,0,sizeof(vis2)); 39 int tot=0; 40 if(n==0)break; 41 scanf("%d",&m); 42 for(int i=1;i<=n;i++) 43 f[i]=i; 44 for(int i=1;i<=m;i++) 45 { 46 int x,y; 47 scanf("%d%d",&x,&y); 48 if(x==y)continue; 49 if(vis[x][y]==1||vis[y][x]==1)continue; 50 if(x>y) 51 { 52 swap(x,y); 53 } 54 unionn(x,y); 55 vis[x][y]=1; 56 vis[y][x]=1; 57 } 58 for(int i=n;i>=1;i--) 59 { 60 if(vis2[i]==0) 61 { 62 dfs(i); 63 tot++; 64 } 65 66 } 67 //cout<<endl; 68 cout<<tot-1; 69 //cout<<endl; 70 //cout<<endl; 71 } 72 73 return 0; 74 }
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
- 软件工程第三次作业 2020-03-30
- X264-应用工程 2019-11-30
- 哈尔滨网络热身赛 2019-11-25
- C++工程师养成 每日一题(vector使用) 2019-11-09
- 两个数的差 2019-10-16
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash