2762
来源:互联网 发布:伪娘 出柜 知乎 编辑:程序博客网 时间:2024/06/05 18:33
给定一个有向图,问任意两点u,v是否满足u能到v或v能到u。
tarjan缩点。然后进行拓扑排序,看结果是否唯一。(记录每个点的入度,每次只有一个入度为0的点)
主要还是想写一下tarjan。
#pragma GCC optimize("O2")#include<cstdio>#include<cstring>#include<iostream>#include<vector>#include<algorithm>#include<set>#include<map>using namespace std;#define rep(i,j,k) for(i=j;i<=k;++i)#define per(i,j,k) for(i=j;i>=k;--i)#define G getchar()#define LL long long#define pii pair<int,int>#define mkp make_pair#define X first#define Y secondconst int N=1005,NN=12005;int n,m;int he[N],ne[NN],to[NN],tot;int dfn[N],low[N],id,stk[N],Tp,inz[N],blg[N],blk;int the[N],tne[N],tto[NN],ttot;int q[N],in[N];void read(int &x){char ch=G;while(ch<48||ch>57)ch=G;for(x=0;ch>47&&ch<58;ch=G)x=x*10+ch-48;}void add(int x,int y){to[++tot]=y;ne[tot]=he[x];he[x]=tot;}void tarjan(int x){int i,y;dfn[x]=low[x]=++id;inz[stk[++Tp]=x]=1;for(i=he[x];i;i=ne[i]){if(!dfn[y=to[i]]){tarjan(y);low[x]=min(low[x],low[y]);}else if(inz[y])low[x]=min(low[x],dfn[y]);}if(dfn[x]==low[x]){++blk;do{inz[y=stk[Tp--]]=0;blg[y]=blk;}while(y!=x);}}void tadd(int x,int y){++in[tto[++ttot]=y];tne[ttot]=the[x];the[x]=ttot;}bool BFS(){int i,Ft=1,Rr=2,u,v;rep(i,1,blk)q[i]=0;rep(i,1,blk)if(!in[i]){if(q[1])return 0;q[1]=i;}while(Ft<Rr){for(i=the[u=q[Ft++]];i;i=tne[i]){if(!(--in[v=tto[i]])){if(q[Rr])return 0;q[Rr]=v;}}if(q[Rr])++Rr;}return 1;}int main(){int _,i,j,x,y;Tp=-1;for(read(_);_--;){read(n);read(m);rep(i,1,n)he[i]=0;tot=0;while(m--){read(x);read(y);add(x,y);}rep(i,1,n)dfn[i]=low[i]=0;id=blk=0;rep(i,1,n)if(!dfn[i])tarjan(i);ttot=0;rep(i,1,blk)the[i]=in[i]=0;rep(i,1,n){x=blg[i];for(j=he[i];j;j=ne[j])if(x!=(y=blg[to[j]]))tadd(x,y);}puts(BFS()?"Yes":"No");}return 0;}
阅读全文
0 0
- 2762
- pku 2762
- poj 2762
- poj 2762
- poj 2762
- POJ 2762
- poj 2762
- [单连通] poj 2762
- 【代码】POJ 2762
- poj 2762 强连通
- POJ 2762 弱联通
- bzoj 2762 树状数组
- 【弱连通分量】POJ 2762
- POJ 2762 单连通图
- hdu 2762 Area of polycube
- poj 2762 tarjan+缩点+拓扑排序
- poj 2762(强连通+判断链)
- poj 2762 (强连通缩点)
- 任务扫描的架构设计
- iOS所有框架-Cocoatouch等
- mybatis 报字符不能转整型
- Abstract 抽象
- Tensorflow中前向传播算法
- 2762
- Android开机log分析
- 打怪【基础字符串】
- QDialog类参考
- java中集合类的详细介绍
- redis入门
- 2017.7.15. SPFA + 并查集
- C++:链表(初识链表)
- 为何img、input等内联元素可以设置宽、高