HDU1269(有向图缩点模板题)
迷宫城堡
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)
Total Submission(s): 11070 Accepted Submission(s): 4948
- #include"cstdio"
- #include"cstring"
- #include"vector"
- using namespace std;
- const int MAXN=;
- vector<int> G[MAXN];
- vector<int> rG[MAXN];
- vector<int> vs;
- int V,E;
- int vis[MAXN];
- inline int max(int a,int b)
- {
- return a > b? a: b;
- }
- void dfs(int u)
- {
- vis[u]=;
- for(int i=;i<G[u].size();i++)
- if(!vis[G[u][i]]) dfs(G[u][i]);
- vs.push_back(u);
- }
- void rdfs(int u)
- {
- vis[u]=;
- for(int i=;i<rG[u].size();i++)
- if(!vis[rG[u][i]]) rdfs(rG[u][i]);
- }
- bool scc()
- {
- memset(vis,,sizeof(vis));
- for(int i=;i<=V;i++)
- if(!vis[i]) dfs(i);
- memset(vis,,sizeof(vis));
- int k=;
- for(int i=vs.size()-;i>=;i--)
- if(!vis[vs[i]])
- {
- rdfs(vs[i]);
- k++;
- if(k>) return false;
- }
- return true;
- }
- int main()
- {
- while(scanf("%d%d",&V,&E)!=EOF&&V)
- {
- vs.clear();
- for(int i=;i<=V;i++)
- {
- G[i].clear();
- rG[i].clear();
- }
- for(int i=;i<E;i++)
- {
- int u,v;
- scanf("%d%d",&u,&v);
- G[u].push_back(v);
- rG[v].push_back(u);
- }
- if(scc())
- {
- printf("Yes\n");
- }
- else
- {
- printf("No\n");
- }
- }
- return ;
- }
模板2:tarjan
- #include<cstdio>
- #include<cstring>
- #include<algorithm>
- #include<vector>
- using namespace std;
- const int MAXN=;
- vector<int> mp[MAXN];
- int n,m;
- int dfn[MAXN],low[MAXN],time;
- int stack[MAXN],top;
- bool ins[MAXN];
- int cnt=;
- void tarjan(int u)
- {
- dfn[u]=low[u]=++time;
- stack[top++]=u;
- ins[u]=true;
- for(int i=;i<mp[u].size();i++)
- {
- int v=mp[u][i];
- if(!dfn[v])
- {
- tarjan(v);
- low[u]=min(low[u],low[v]);
- }
- else if(ins[v]) low[u]=min(low[u],dfn[v]);
- }
- if(dfn[u]==low[u])
- {
- int v;
- cnt++;
- do{
- v=stack[--top];
- ins[v]=false;
- }while(u!=v);
- }
- }
- int main()
- {
- while(scanf("%d%d",&n,&m)!=EOF)
- {
- if(n==&&m==)
- break;
- memset(dfn,,sizeof(dfn));
- memset(low,,sizeof(low));
- memset(ins,false,sizeof(ins));
- time=;
- top=;
- cnt=;
- for(int i=;i<=n;i++)
- mp[i].clear();
- for(int i=;i<m;i++)
- {
- int u,v;
- scanf("%d%d",&u,&v);
- mp[u].push_back(v);
- }
- for(int i=;i<=n;i++)
- {
- if(!dfn[i])
- {
- tarjan(i);
- }
- }
- if(cnt==)
- printf("Yes\n");
- else
- printf("No\n");
- }
- }
该题目也可用并查集做。
- #include"cstdio"
- #include"cstring"
- using namespace std;
- const int MAXN=;
- int V,E;
- int par[][MAXN];//par[0][MAXN]记录正向边,par[1][MAXN]记录反向边
- int fnd(int x,int type)
- {
- if(par[type][x]==x)
- {
- return x;
- }
- return par[type][x]=fnd(par[type][x],type);
- }
- void unite(int x,int y)
- {
- if(x>) par[][x]=fnd(y,);//将结点1作为根结点
- if(y>) par[][y]=fnd(x,);
- }
- bool judge()
- {
- for(int i=;i<=V;i++)
- if(fnd(i,)!=||fnd(i,)!=) return false;//若所有结点(除1)沿正向边均能到达1结点且将边反向后也均能到达1结点,那么改图为强连通图
- return true;
- }
- int main()
- {
- while(scanf("%d%d",&V,&E)!=EOF&&V)
- {
- for(int i=;i<=V;i++) par[][i]=par[][i]=i;
- for(int i=;i<E;i++)
- {
- int u,v;
- scanf("%d%d",&u,&v);
- unite(u,v);
- }
- if(judge()) printf("Yes\n");
- else printf("No\n");
- }
- return ;
- }
HDU1269(有向图缩点模板题)的更多相关文章
- HDU-3549 最大流模板题
1.HDU-3549 Flow Problem 2.链接:http://acm.hdu.edu.cn/showproblem.php?pid=3549 3.总结:模板题,参考了 http://ww ...
- Dancing Link --- 模板题 HUST 1017 - Exact cover
1017 - Exact cover Problem's Link: http://acm.hust.edu.cn/problem/show/1017 Mean: 给定一个由0-1组成的矩阵,是否 ...
- poj1511/zoj2008 Invitation Cards(最短路模板题)
转载请注明出处: http://www.cnblogs.com/fraud/ ——by fraud Invitation Cards Time Limit: 5 Seconds ...
- HDU 1814 Peaceful Commission / HIT 1917 Peaceful Commission /CJOJ 1288 和平委员会(2-sat模板题)
HDU 1814 Peaceful Commission / HIT 1917 Peaceful Commission /CJOJ 1288 和平委员会(2-sat模板题) Description T ...
- [USACO07FEB]银牛派对Silver Cow Party---最短路模板题
银牛排队 对于我这种蒟蒻来说,还是不要跑一次单元最短路.跑两次好写呀(- ̄▽ ̄)- 而题目中是有向图.如果如果按照题意进行最短路的话.就会出现一个单终点最短路和一个单起点最短路 对于单起点自然就是套模 ...
- LuoGu-P2863牛的舞会The Cow Prom[tarjan 缩点模板]
传送门:https://www.luogu.org/problemnew/show/P2863 思路:tarjan模板题,之前会的tarjan,一直想学缩点到底是什么操作,发现就是把同组的放在一个数组 ...
- POJ 2186:Popular Cows Tarjan模板题
Popular Cows Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 25945 Accepted: 10612 De ...
- 对Tarjan——有向图缩点算法的理解
开始学tarjan的时候,有关无向图的割点.桥.点双边双缩点都比较容易地理解了,唯独对有向图的缩点操作不甚明了.通过对luoguP2656_采蘑菇一题的解决,大致搞清了tarjan算法的正确性. 首先 ...
- [AHOI 2009] 维护序列(线段树模板题)
1798: [Ahoi2009]Seq 维护序列seq Time Limit: 30 Sec Memory Limit: 64 MB Description 老师交给小可可一个维护数列的任务,现在小 ...
随机推荐
- 1-1:CSS3课程入门之属性选择器
div[name=jewave] 选取属性名为name且属性值是"jewave"的元素 div[name^=jewave]选取属性名为name且属性值以"jewave&q ...
- 安装部署Solrcloud
实验说明: 三台虚拟机做solrcloud集群 安装solr前请确保jdk .tomcat.zookeeper已安装好,否则无法启动 三台虚拟机I ...
- SpringBoot定时任务升级篇(动态添加修改删除定时任务)
需求缘起:在发布了<Spring Boot定时任务升级篇>之后得到不少反馈,其中有一个反馈就是如何动态添加修改删除定时任务?那么我们一起看看具体怎么实现,先看下本节大纲: (1)思路说明: ...
- 【BZOJ4173】数学 欧拉函数神题
[BZOJ4173]数学 Description Input 输入文件的第一行输入两个正整数 . Output 如题 Sample Input 5 6 Sample Output 240 HINT N ...
- .Net反射机制
现在谈.Net反射机制本不在计划中,因为本打算研究完设计模式后再去学习别的技术:但迫于设计模式系列一创建型之(抽象工厂模式)一章中遗留问题,才不得已在设计模式之游中插入本篇文章!签于本人对反射理解也不 ...
- python的接口类的思考?
1.java怎么实现多继承的功效:https://www.cnblogs.com/Berryxiong/p/6142735.html 2.python的接口类和抽象类:https://www.cnbl ...
- (1)Web 应用是一个状态机,视图与状态是一一对应的。 (2)所有的状态,保存在一个对象里面。
Redux 入门教程(一):基本用法 - 阮一峰的网络日志 http://www.ruanyifeng.com/blog/2016/09/redux_tutorial_part_one_basic_u ...
- 360手机助手: App上架(提交资料)注意事项
提交app资料尤其注意: .keystore和密码?由HBuilder提供公有证书: 签名证书KeyStore证书别名:hbuilder证书密码:123456keystore密码:123456 360 ...
- 性能测试--siege
siege 这是Linux系统下的一个测试工具,完全使用C语言实现,可以对HTTP和FTP服务器进行负载和性能测试.通过使用Siege 提供的功能,可以很容易的制定测试计划:包括规定使用并发用户数.重 ...
- python cookbook第三版学习笔记二:字典
一般来说字典中是一个键对应一个单值的映射,如果想一个键值映射多个值,那么就需要将这些值放到另外的容器中,比如列表或者集合. 比如d={'a':[1,2]} Collections中的defaultdi ...