UVa247: Calling Circles 题解
来源:互联网 发布:选择 net java 编辑:程序博客网 时间:2024/06/08 04:59
有很多算法是用floyd求传递闭包
但感觉裸的tarjan效率更高
#include <cstdio>#include <iostream>#include <cstring>#include <string>#include <cmath>#include <algorithm>#include <cstdlib>#include <utility>#include <map>#include <stack>#include <set>#include <vector>#include <queue>#include <deque>#include <sstream>#define x first#define y second#define mp make_pair#define pb push_back#define LL long long#define Pair pair<int,int>#define LOWBIT(x) x & (-x)using namespace std;const int MOD=1e9+7;const int INF=0x7ffffff;const int magic=348;struct node{int indexx;int lowlink;}v[148];vector<int> edge[148];int indexx;map<Pair,bool> judge;map<string,int> m;map<int,string> name;int n,e,tot;stack<int> sta;bool visited[148]; void tarjan(int cur){visited[cur]=true;sta.push(cur);v[cur].indexx=v[cur].lowlink=++indexx;int i,x;for (i=0;i<edge[cur].size();i++){x=edge[cur][i];if (v[x].indexx==0){tarjan(x);v[cur].lowlink=min(v[cur].lowlink,v[x].lowlink);}else{if (visited[x]) v[cur].lowlink=min(v[cur].lowlink,v[x].indexx);}}if (v[cur].indexx==v[cur].lowlink){do{x=sta.top();sta.pop();cout<<name[x];visited[x]=false;if (x!=cur) printf(", ");}while (cur!=x);printf("\n");}}int main (){int i,ca=0;string s1,s2;while (scanf("%d%d",&n,&e) && (n || e)){//if (ca) printf("\n");m.clear();name.clear();tot=0;indexx=0;//judge.clear();for (i=1;i<=n;i++) edge[i].clear();for (i=1;i<=n;i++) v[i].indexx=v[i].lowlink=0;for (i=1;i<=n;i++) visited[i]=false;for (i=1;i<=e;i++){cin>>s1>>s2;if (!m[s1]){m[s1]=++tot;name[tot]=s1;}if (!m[s2]){m[s2]=++tot;name[tot]=s2;}//if (judge[mp(m[s1],m[s2])]) continue;edge[m[s1]].pb(m[s2]);//judge[mp(m[s1],m[s2])]=true;}printf("Calling circles for data set %d:\n",++ca);for (i=1;i<=n;i++)if (!v[i].indexx) tarjan(i);}return 0;}
阅读全文
0 0
- UVa247: Calling Circles 题解
- UVa247 - Calling Circles
- UVA247- Calling Circles
- UVa247 Calling Circles
- Uva247——Calling Circles
- uva247-Calling Circles-Floyd算法
- uva247 - Calling Circles(传递闭包+DFS)
- Uva247.Calling Circles(Floyd求连通性)
- UVA247- Calling Circles(有向图的强连通分量)
- [Uva247][Tarjan求强连通分量][Calling Circles]
- UVA247 Calling Circles (有向图传递闭包)
- 算法竞赛入门经典 第二版 例题11-4 电话圈 Calling Circles uva247
- UVA247[Calling Circles] Floyed求传递闭包 || tarjan求SCC
- Calling Circles
- Calling Circles
- 电话圈(Calling Circles,ACM/ICPC World Finals 1996,UVA247) ——Floyd图的传递闭包
- UVa 247 Calling Circles
- UVA 247 Calling Circles
- I,P,B帧和PTS,DTS的关系
- genymotion不能联网
- 适配器模式
- Maven Error:No compiler is provided in this environment的解决办法
- ES6中的迭代器(Iterator)和生成器(Generator)
- UVa247: Calling Circles 题解
- 纯css制作的打勾(√)小图标
- 使用Java求100-1000之间的质数(素数)与数量
- Java jdbc封装 反向映射之查询
- 设计模式之桥接模式
- 黑客利用智能绘图平板发起DDoS攻击
- [caioj]单调队列3 单调队列
- JMeter使用
- 同样的程序每次运行的时间不一样