杭电1269-Tarjan算法
来源:互联网 发布:拼图软件 编辑:程序博客网 时间:2024/06/06 00:51
此题用到了Tarjan算法 详见:http://www.cppblog.com/sosi/archive/2010/09/26/127797.aspx
<pre name="code" class="cpp">#include <iostream>#include <cstdio>#include <vector>#include<stack>using namespace std;#define maxn 20005int n,m;struct Node{int dnf;int visit;int low;int instack;int root;void init(){dnf=-1;visit=0;low=-1;instack=0;root=-1;}};int num,circle;stack<int>s;vector<int>mapp[maxn];Node stu[maxn];void Tarjan(int sum){s.push(sum);stu[sum].dnf=num++;stu[sum].visit=1;stu[sum].instack=1;stu[sum].low=stu[sum].dnf;for(int i=0;i<mapp[sum].size();i++){if(!stu[mapp[sum][i]].visit){Tarjan(mapp[sum][i]);stu[sum].low=min(stu[sum].low,stu[mapp[sum][i]].low);}else if(stu[mapp[sum][i]].instack){stu[sum].low=min(stu[sum].low,stu[mapp[sum][i]].dnf);}}if(stu[sum].low==stu[sum].dnf){int r;do{r=s.top();stu[r].root=circle;s.pop();stu[r].instack=0;}while(r!=sum);circle++;}}int main(){int i,j,n1,n2;while(~scanf("%d%d",&n,&m)&&(n||m)){for(i=0;i<maxn;i++){mapp[i].clear();stu[i].init();}while(s.size()){s.pop();}num=1;circle=0;for(i=1;i<=m;i++){scanf("%d%d",&n1,&n2);mapp[n1].push_back(n2);}for(i=1;i<=n;i++){if(!stu[i].visit)Tarjan(i);}if(circle==1)printf("Yes\n");else printf("No\n");}return 0;}
0 0
- 杭电1269-Tarjan算法
- tarjan算法 杭电迷宫城堡。
- hdu 1269-tarjan算法
- hdu 1269 tarjan算法模板
- tarjan算法
- Tarjan算法
- tarjan算法
- Tarjan算法
- Tarjan算法
- Tarjan算法
- Tarjan 算法
- Tarjan算法
- Tarjan算法
- tarjan算法
- Tarjan算法
- tarjan算法
- tarjan算法
- Tarjan算法
- JAVA004--3种循环对比,for;while;do{}while
- CentOS/RedHat和Debian/Ubuntu安装VMware Tools时无法找到kernel header path的解决方案
- 懵懵懂懂搭建数据库环境(流程主导,工作分解)
- 人见人爱A+B
- 字符串处理(库函数)
- 杭电1269-Tarjan算法
- 258. Add Digits [easy] (Python)
- Cocos2d-x 3.9 + VS2012 + BabeLua 如何搭建cocos2dx lua环境
- Stanford 机器学习 Anomaly Detection
- hihoCoder1301 筑地市场(统计符合条件数字,数位dp)
- 匈牙利算法模板及解释
- Hibernate中的级联策略和object references an unsaved transient instance - save the transient instance before
- windows命令行启动虚拟机(VirtualBox、VMware)
- HDU1068 二分图 最大独立集