題意,從0點出發,遍歷所有點,遍歷邊時候要付出代價,在一個SCC中的邊不要付費。求最小費用。
有向圖縮點(無需建立新圖,,n《=50000,建則超時),遍歷邊,若不在一個SCC中,用一個數組更新記錄最小到達該連通分量的最小邊權即可。。。邊聊天,邊1A,哈哈。。。
#include#include #include #include #include using namespace std; const int inf=0x3f3f3f3f; const int maxv=50005,maxe=100005; int nume=0;int head[maxv];int e[maxe][3]; void inline adde(int i,int j,int c) { e[nume][0]=j;e[nume][1]=head[i];head[i]=nume; e[nume++][2]=c; } int dfn[maxv];int low[maxv];int vis[maxv];int ins[maxv]; stack sta; int scc[maxv];int numb=0;int times=0; int n,m; void tarjan(int u) { dfn[u]=low[u]=times++; ins[u]=1; sta.push(u); for(int i=head[u];i!=-1;i=e[i][1]) { int v=e[i][0]; if(!vis[v]) { vis[v]=1; tarjan(v); if(low[v]