现在的位置: 首页 > 综合 > 正文

poj 2762 Going from u to v or fr…

2018年03月17日 ⁄ 综合 ⁄ 共 1154字 ⁄ 字号 评论关闭
题意+思路 见前一博文

#include <stdio.h>
#include <string.h>
#define VM 1005
#define EM 6005

struct E
{
    int
to,next;
}edge[EM];
struct E1
{
    int
frm,to,next;
}edge1[EM];
int head[VM],head1[VM],indeg[VM],map[VM][VM];
int dfn[VM],low[VM],vis[VM],belong[VM],stack[VM];
int scc,cnt,top,p,n;

void addedge (int cu,int cv)
{
    edge[p].to =
cv;
    edge[p].next
= head[cu];
    head[cu] =
p++;
}

void addedge1(int cu,int cv)
{
    edge1[p].frm
= cu;
    edge1[p].to
= cv;
   
edge1[p].next = head1[cu];
    head1[cu] =
p ++;
}
void tarjan (int u)
{
    int v;
    dfn[u] =
low[u] = ++cnt;
    stack[top++]
= u;
    vis[u] =
1;
    for (int i =
head[u];i != -1;i = edge[i].next)
    {
       
v = edge[i].to;
       
if (!dfn[v])
       
{
           
tarjan(v);
           
low[u] = low[u] > low[v]?low[v]:low[u];
       
}
       
else if (vis[v]&&low[u]
> dfn[v])
           
low[u] = dfn[v];
    }
    if (dfn[u]
== low[u])
    {
       
++scc;
       
do
       
{
           
v = stack[--top];
           
vis[v] = 0;
           
belong[v] = scc;
       
} while (u != v);
    }
}
void sovle ()
{
    int u;
    scc = top =
cnt = 0;
    memset
(dfn,0,sizeof(dfn));
    memset
(vis,0,sizeof(vis));
    for (u = 1;u
<= n;u ++)
       
if (!dfn[u])
           
tarjan(u);
}

int topo ()
{
    int
u,v,i,cur,count = 0;;
    for (u = 1;u
<= scc;u ++)
       
if (!indeg[u])
       
{
          

抱歉!评论已关闭.