uva247
来源:互联网 发布:安徽宝德网络 编辑:程序博客网 时间:2024/06/07 05:27
题意:。
思路:入门经典365。
AC代码: 理解还不深刻。
#include <stdio.h>#include <string.h>#include <algorithm>#include <iostream>#include <vector>#include <string>#include <map>using namespace std;map<string,int>mp;vector<string>p(10001);int vis[50];int g[50][50];int d[50][50];void init(){ memset(vis,0,sizeof(vis)); memset(g,0,sizeof(g)); memset(d,0,sizeof(d)); mp.clear(); p.clear();}int n,m;void floyed(){ for(int k=0; k<n; k++){ for(int i=0; i<n; i++){ for(int j=0; j<n; j++){ g[i][j]=g[i][j]||(g[i][k] && g[k][j]); } } }}void dfs(int u){ vis[u]=1; for(int i=0; i<n; i++){ if(!vis[i] && d[u][i] && d[i][u]){ cout << ", " << p[i]; dfs(i); } } return ;}int main(){ // freopen("2.txt","r",stdin); int c=0; while(scanf("%d%d",&n,&m)!=EOF &&n &&m){ init(); string a,b; int id=0; for(int i=1; i<=m; i++){ cin>>a>>b; if(!mp.count(a)) {mp[a]=id++; p.push_back(a);} if(!mp.count(b)) {mp[b]=id++; p.push_back(b);} g[mp[a]][mp[b]]=1; } if(c) printf("\n"); printf("Calling circles for data set %d:\n",++c); floyed(); for(int i=0; i<n; i++){ for(int j=i+1; j<n; j++){ if(g[i][j] && g[j][i]) { d[i][j]=d[j][i]=1; } } } for(int i=0; i<n; i++){ if(!vis[i]){ cout << p[i]; dfs(i);cout << endl; } } } return 0;}
0 0
- uva247
- uva247
- UVa247 - Calling Circles
- uva247 传递闭包
- acm-UVA247解题报告
- UVA247- Calling Circles
- UVa247 Calling Circles
- UVa247: Calling Circles 题解
- UVA247 电话圈
- Uva247——Calling Circles
- uva247-Calling Circles-Floyd算法
- Uva247(tarjan模板题)
- 例题11-4 电话圈 UVa247
- 例题11-4 电话圈 uva247
- uva247 - Calling Circles(传递闭包+DFS)
- uva247电话圈(floyd求闭包,建图)
- Uva247 Floyd传递闭包+map处理
- Uva247.Calling Circles(Floyd求连通性)
- Struts逐步学习
- WebView使用详解(一)——Native与JS相互调用(附JadX反编译)
- 选择排序法
- 商都论坛注册
- POJ 2253Frogger(翻译/最短路/floyd/思维)
- uva247
- 《简易新闻》源码分析
- eqeqw
- BroadleafCommerce使用Oracle
- Activity之获取栈中activity的class名称,获取应用程序的包信息等
- C++友元
- 浅谈设计模式之外观模式
- 汉诺塔问题 hanoi tower (递归)。
- 在一个数组中找差值最大数对,输出最大差值