Codevs1332上白泽慧音
2017-11-02 18:49
323 查看
http://codevs.cn/problem/1332/
Tarjin裸题卡输出…
学会机智的统计答案。
Tarjin裸题卡输出…
代码
#include<iostream> #include<cstdio> #include<algorithm> #include<cstring> #include<cmath> using namespace std; int n,m,ru,rv,rw,tot,cnt,num,p,maxn; int first[200010],nxt[200010],sccno[100010],siz[100010],stak[100010],dfn[100010],low[100010]; struct edge { int u,v,w; }l[200010]; void build(int f,int t,int c) { l[++tot]=(edge){f,t,c}; nxt[tot]=first[f]; first[f]=tot; } void dfs(int k) { dfn[k]=low[k]=++tot; stak[++num]=k; for(int i=first[k];i!=-1;i=nxt[i]) { int x=l[i].v; if(!dfn[x]) { dfs(x); low[k]=min(low[k],low[x]); } else if(!sccno[x]) low[k]=min(low[k],dfn[x]); } if(dfn[k]==low[k]) { cnt++; while(1) { sccno[stak[num--]]=cnt; siz[cnt]++; if(stak[num+1]==k) break; } } } int main() { memset(first,-1,sizeof(first)); scanf("%d%d",&n,&m); for(int i=1;i<=m;i++) { scanf("%d%d%d",&ru,&rv,&rw); build(ru,rv,rw); if(rw==2) build(rv,ru,rw); } tot=0; for(int i=1;i<=n;i++) { if(!dfn[i]) { dfs(i); } } for(int i=1;i<=n;i++)//应对卡输出的机智方法 { //或者重载vector < 运算符 if(siz[i]>maxn) //或者vector套优先队列... { maxn=siz[i]; p=i; } } printf("%d\n",maxn); for(int i=1;i<=n;i++) { if(sccno[i]==p) printf("%d ",i); } return 0; }
学会机智的统计答案。
相关文章推荐
- <tarjan算法模板> codevs 1332 上白泽慧音
- codevs 1332 上白泽慧音
- codevs 1332 上白泽慧音(Tarjan)
- [tarjan][codevs1332] 上白泽慧音
- CODEVS 1332 上白泽慧音
- tarjan讲解(用codevs1332(tarjan的裸题)讲解)
- Code[VS] 1332 题解 【Kosaraju】【Tarjan】
- 【基础练习】【强连通tarjan】codevs1332 上白沢慧音题解
- CodeVS1702 素数判定 2
- code[vs] 3117 高精度练习之乘法
- Python+VSCode+Git 学习总结
- codevs1200 NOIP2012D2T1 同余方程
- codevs 1017 乘积最大
- codevs1064
- VS code当前设置备份
- codevs2618核电站问题
- codevs 3290 华容道
- vscode编辑器——编译调试小问题
- 路由选择(codevs 1062)
- 【codevs1074】食物链