当前位置:网站首页>poj 2762 Going from u to v or from v to u? (infer whether it is a weak link diagram)
poj 2762 Going from u to v or from v to u? (infer whether it is a weak link diagram)
2022-07-05 23:16:00 【Full stack programmer webmaster】
Hello everyone , I meet you again , I'm the king of the whole stack
Serie A Champion : Given a digraph has m Unidirectional edge . Free inference whether two points up (a Sure b or b Sure a Or at most each other ), The request
Weak connection weight .
Algorithm :
Shrink the point to find the strongly connected component . Then build the map again . Infer whether the new graph is a single chain , That is, you can't fork , If it forks, there will be inaccessible situations .
How to infer whether it is a single chain ?
It means that each entry is 0 There is only one point , That is, there is only one point in the queue each time .
( o(╯□╰)o....
. It seems to have been used for the second time pair Record the point pairs of the original drawing , Then save pair Of vector Forgetting to empty leads to wa Come on wa Go to !
)
#include<cstdio>
#include<iostream>
#include<cstring>
#include<queue>
#include<vector>
#define maxn 1010
#define maxm 20010
using namespace std;
struct node
{
int to,next;
}edge[maxm],edge2[maxm];
int head[maxn],cnt,n;
int clk,top,s[maxn],scc,dfn[maxn],low[maxn],belong[maxn];
bool instack[maxn],vis[maxn];
int head2[maxn],cnt2,in[maxn];
typedef pair<int,int> PII;
vector<PII> xx;
queue<int> q;
void add(int x,int y)
{
edge[cnt].to = y;
edge[cnt].next = head[x];
head[x] = cnt++;
}
void add2(int x,int y)
{
edge2[cnt2].to = y;
edge2[cnt2].next = head2[x];
head2[x] = cnt2++;
}
void dfs(int x)
{
dfn[x] = low[x] = clk++;
s[top++] = x;
instack[x] = true;
for(int i=head[x];i!=-1;i = edge[i].next)
{
int u = edge[i].to;
if(dfn[u]==-1)
{
dfs(u);
low[x] = min(low[u],low[x]);
}
else if(instack[u])
{
low[x] = min(low[x],dfn[u]);
}
}
if(low[x]==dfn[x])
{
int u;
scc++;
do
{
u = s[--top];
instack[u]=false;
belong[u] = scc;
}while(u!=x);
}
}
void tarjan()
{
memset(dfn,-1,sizeof(dfn));
memset(instack,0,sizeof(instack));
memset(belong,0,sizeof(belong));
clk = top = scc = 0;
for(int i=1;i<=n;i++)
{
if(dfn[i]==-1)
dfs(i);
}
}
bool topo()
{
memset(vis,0,sizeof(vis));
int c = 0;
while(!q.empty())
q.pop();
for(int i=1;i<=scc;i++)
{
if(!in[i])
{
c++;
q.push(i);
}
}
if(c>1) return false;
while(!q.empty())
{
int u = q.front();
q.pop();
if(vis[u]) continue;
vis[u] = true;
c = 0;
for(int i=head2[u];i!=-1;i=edge2[i].next)
{
int v = edge2[i].to;
in[v]--;
if(!in[v])
{
q.push(v);
c++;
}
}
if(c>1)
return false;
}
return true;
}
int main()
{
int m,a,b,T;
scanf("%d",&T);
while(T--)
{
scanf("%d%d",&n,&m);
memset(head,-1,sizeof(head));
memset(in,0,sizeof(in));
xx.clear();
cnt = 0;
for(int i=1;i<=m;i++)
{
scanf("%d%d",&a,&b);
add(a,b);
xx.push_back(make_pair(a,b));
}
tarjan();
memset(head2,-1,sizeof(head2));
cnt2 = 0;
for(int i=0;i<xx.size();i++)
{
int u = xx[i].first,v = xx[i].second;
if(belong[u]!=belong[v])
{
add2(belong[u],belong[v]);
in[belong[v]]++;
}
}
if(topo()) printf("Yes\n");
else printf("No\n");
}
return 0;
}
Copyright notice : This article is an original blog article , Blog , Without consent , Shall not be reproduced .
Publisher : Full stack programmer stack length , Reprint please indicate the source :https://javaforall.cn/117526.html Link to the original text :https://javaforall.cn
边栏推荐
- regular expression
- Creative mode 1 - single case mode
- VS2010 writes DLL and unit test of dynamic link library, and transfers the correctness of DLL test
- Roman numeral to integer
- Element operation and element waiting in Web Automation
- Data type, variable declaration, global variable and i/o mapping of PLC programming basis (CoDeSys)
- 一文搞定JVM的内存结构
- LeetCode——Add Binary
- From the perspective of quantitative genetics, why do you get the bride price when you get married
- 3D point cloud slam
猜你喜欢
Go language implementation principle -- lock implementation principle
Selenium+pytest automated test framework practice
【Note17】PECI(Platform Environment Control Interface)
The method and principle of viewing the last modification time of the web page
Leetcode daily question 1189 The maximum number of "balloons" simple simulation questions~
LabVIEW打开PNG 图像正常而 Photoshop打开得到全黑的图像
Hcip day 12 (BGP black hole, anti ring, configuration)
Matlab smooth curve connection scatter diagram
Three.js-01 入门
两数之和、三数之和(排序+双指针)
随机推荐
Three. JS VR house viewing
Calculating the number of daffodils in C language
Marginal probability and conditional probability
Fix the memory structure of JVM in one article
npm ELECTRON_ Mirror is set as domestic source (npmmirror China mirror)
VS2010 writes DLL and unit test of dynamic link library, and transfers the correctness of DLL test
一文搞定class的微观结构和指令
Selenium+pytest automated test framework practice
Getting started stm32--gpio (running lantern) (nanny level)
Go语言实现原理——Map实现原理
一文搞定class的微觀結構和指令
2.13 summary
[screen recording] how to record in the OBS area
Realize reverse proxy client IP transparent transmission
UART Application Design and Simulation Verification 2 - TX Module Design (Stateless machine)
One article deals with the microstructure and instructions of class
Debian 10 installation configuration
grafana工具界面显示报错influxDB Error
PLC编程基础之数据类型、变量声明、全局变量和I/O映射(CODESYS篇 )
asp. Net pop-up layer instance