栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

poj 2762 Going from u to v or...

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

poj 2762 Going from u to v or...

#include <cstdio>#include <cstring>#include <cmath>#include <cctype>#include <cstdlib>#include <ctime>#include <iostream>#include <vector>#include <map>#include <queue>#include <algorithm>#define MIN(a,b) ((a)<(b)?(a):(b))#define MAX 1301#define MAXM 6301using namespace std;int n,m,Sum,Count;int l[MAXM],r[MAXM];int fa[MAX],Du[MAX],DU_R[MAX];vector <int> f[MAX];int DNF[MAX],LOW[MAX];int Stack[MAX],Top=0;bool b[MAX],vis[MAX];int find(int x){if(fa[x]!=x) fa[x]=find(fa[x]);return fa[x];}void tarjan(int x);bool DFS(int x,int y);void init(){memset(vis,false,sizeof(vis));for(int i=1;i<=Sum;i++){Du[i]=DU_R[i]=0;b[i]=false;f[i].clear();}}void readin();void work();int main(){int T;scanf("%d",&T);while(T){readin();work();init();T--;}return 0;}void readin(){scanf("%d%d",&n,&m);for(int i=1;i<=m;i++){scanf("%d%d",&l[i],&r[i]);Du[l[i]]++;f[l[i]].push_back(r[i]);}}void work(){int x,y;Sum=0;Count=0;for(int i=1;i<=n;i++)if(!vis[i])tarjan(i);for(int i=1;i<=m;i++){x=fa[l[i]];y=fa[r[i]];if(x==y) continue;Du[x]++;DU_R[y]++;f[x].push_back(y);}memset(b,0,sizeof(b));for(int i=1;i<=Sum;i++)if(!DU_R[i]){if(DFS(i,1)) printf("Yesn");else printf("Non");return ;}}void tarjan(int x){int X;DNF[x]=LOW[x]=++Count;Stack[++Top]=x;b[x]=true;for(int i=0;i<Du[x];i++){X=f[x][i];if(b[X]) LOW[x]=MIN(LOW[x],DNF[X]);else if(!vis[X]){tarjan(X);LOW[x]=MIN(LOW[x],LOW[X]);}}Du[x]=0;f[x].clear();vis[x]=true;if(DNF[x]!=LOW[x]) return ;Sum++;while(1){X=Stack[Top--];fa[X]=Sum;b[X]=false;if(X==x) return ;}}bool DFS(int x,int y){b[x]=true;if(y==Sum) return true;for(int i=0;i<Du[x];i++){int X=f[x][i];if(b[X]) continue;if(DFS(X,y+1)) return true;}return false;}
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/378695.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号