标签:des style http color java os io strong
3 3 0 1 100 1 2 50 0 2 100 3 3 0 1 100 1 2 50 2 1 100 2 2 0 1 50 0 1 100
150 100 50
#include"stdio.h"
#include"string.h"
#include"stack"
#include"algorithm"
#include"iostream"
using namespace std;
#define N 50005
#define min(a,b) (a<b?a:b)
const int inf=0x7fffffff;
stack<int>s;
int head[N],dfn[N],low[N],mark[N],be[N];
int n,m,t,index,bcnt,stop,dis[N],stap[N];
struct node
{
int u,v,w,next;
}e[N*3];
struct st
{
int u,v,w;
}g[N*3];
bool cmp(st a,st b)
{
return a.w<b.w;
}
void add(int u,int v,int w)
{
e[t].u=u;
e[t].v=v;
e[t].w=w;
e[t].next=head[u];
head[u]=t++;
}
void tarjan(int u)
{
int i,v;
dfn[u]=low[u]=++index;
stap[++stop]=u;
mark[u]=1;
for(i=head[u];i!=-1;i=e[i].next)
{
v=e[i].v;
if(!dfn[v])
{
tarjan(v);
low[u]=min(low[u],low[v]);
}
else if(mark[v])
{
low[u]=min(low[u],dfn[v]);
}
}
if(dfn[u]==low[u])
{
bcnt++;
do
{
v=stap[stop--];
mark[v]=0;
be[v]=bcnt;
}while(u!=v);
}
}
void solve()
{
int i;
memset(dfn,0,sizeof(dfn));
index=bcnt=stop=0;
for(i=0;i<n;i++)
{
if(!dfn[i])
tarjan(i);
}
}
void work()
{
int i,u,v,ans=0;
for(i=1;i<=bcnt;i++)
dis[i]=inf;
for(i=0;i<m;i++) //缩点后图就是一个有向无环图(deg)
{ //除定点外,每个点的入度均为1
u=be[g[i].u];
v=be[g[i].v];
if(u!=v)
{
dis[v]=min(dis[v],g[i].w);
}
}
for(i=1;i<=bcnt;i++)
{
if(dis[i]!=inf)
ans+=dis[i];
}
printf("%d\n",ans);
}
int main()
{
int i,num,u,v,w;
while(~scanf("%d%d",&n,&m))
{
memset(head,-1,sizeof(head));
num=t=0;
for(i=0;i<m;i++)
{
scanf("%d%d%d",&u,&v,&w);
add(u,v,w);
g[num].u=u;
g[num].v=v;
g[num++].w=w;
}
solve();
work();
}
return 0;
}
hdu 3072 Intelligence System(强连通分量),布布扣,bubuko.com
hdu 3072 Intelligence System(强连通分量)
标签:des style http color java os io strong
原文地址:http://blog.csdn.net/u011721440/article/details/38403811