CS 400 Simple Pahts 割边,路径唯一
来源:互联网 发布:调度算法计算题 编辑:程序博客网 时间:2024/06/08 04:01
题意:n点m条边的无向图,Q次询问,每次询问(x,y) 问x->y的简单路径是否唯一? n,m,Q<=1e3.
现在找到一条x-y的路径p. 那么路径p上的边 如果存在有一条边不是割边的话 那么x-y有多条路径 (因为去掉这条边后 x->y仍然有路径).
如果路径p上的边都为割边 那么x->y存在唯一一条路径 (假如还有路径 那么代表p上的某条边去掉后 x-y仍然联通,矛盾.)
现在找到一条x-y的路径p. 那么路径p上的边 如果存在有一条边不是割边的话 那么x-y有多条路径 (因为去掉这条边后 x->y仍然有路径).
如果路径p上的边都为割边 那么x->y存在唯一一条路径 (假如还有路径 那么代表p上的某条边去掉后 x-y仍然联通,矛盾.)
现在只保留图中的割边 如果此时x-y还是联通 那么x-y只有一条简单路径.
#include <bits/stdc++.h>using namespace std;const int N=2e5+5;struct node{int u,v,nxt;}e[N];int head[N],lo[N],dn[N],bri[N];int cnt=0,num=0,n,m,Q,tot=0;void add_edge(int u,int v){e[cnt].u=u,e[cnt].v=v;e[cnt].nxt=head[u],head[u]=cnt++;}void dfs(int u,int fa){lo[u]=dn[u]=++tot;for(int i=head[u];i!=-1;i=e[i].nxt){int v=e[i].v;if(v==fa)continue;if(!dn[v]){dfs(v,u);lo[u]=min(lo[u],lo[v]);if(lo[v]>dn[u])bri[++num]=i;}elselo[u]=min(lo[u],dn[v]);}}int fa[N],u,v;int find(int x){return fa[x]==x?x:fa[x]=find(fa[x]);}int main(){cin>>n>>m>>Q;memset(head,-1,sizeof(head));for(int i=1;i<=n;i++)fa[i]=i,dn[i]=0;for(int i=0;i<m;i++){scanf("%d%d",&u,&v);add_edge(u,v);add_edge(v,u);}dfs(1,0);//cout<<"tsubasa "<<num<<endl;for(int i=1;i<=num;i++){int fx=find(e[bri[i]].u),fy=find(e[bri[i]].v);if(fx!=fy)fa[fx]=fy;}while(Q--){scanf("%d%d",&u,&v);puts((find(u)==find(v))?"1":"0");}return 0;}
阅读全文
0 0
- CS 400 Simple Pahts 割边,路径唯一
- 最小割唯一性判定
- zoj2587 sap最小割+判断割的唯一性
- 割点、割边
- 割点、割边
- 割点 割边
- 割点、割边
- ZOJ 2587 最小割的唯一性
- ZOJ 2587 最小割的唯一性
- zoj 2587(判割是否唯一)
- zju 2587 判断最小割是否唯一
- ZOJ 2587 最小割唯一性
- bzoj1797 最小割唯一性问题
- Leetcode028--唯一路径
- 割边
- 割边
- 割边
- 割点和割边
- RocketMQ原理解析-broker 6.索引服务
- Linux之MariaDB基础总结(一)
- 人工智能三大学派
- 如何获取保存阿里云的图片url
- SpringMVC整合Highcharts(基本饼图,条形图,柱状图)
- CS 400 Simple Pahts 割边,路径唯一
- 重载和重写的区别
- Struts2.5版本以上的struts.xml配置
- Java实现二叉树的遍历
- App应用字体大小保持固定以及关于Configuration的变化
- (A5,二)利用java反射机制----手写SpringIOC框架
- 我不是一名UX设计师,你也不是
- HR最讨厌的几种求职者·
- 谷歌浏览器Chrome安装json格式化插件(可以进行谷歌搜索)