題目大意:
給定乙個n (n<=100)個點的有向圖,
問:q1、最少需要選擇多少個點,使得從這些點出發能遍歷完整個圖;
q2、最少需要新增多少條有向邊,使得整個圖成為強連通圖;
分析:求出強連通分量後進行縮點,得到每個強連通分量的入度in,出度out;
q1: 入度為0的強連通分量個數;
q2: max( 入度為0的強連通分量個數 , 出度為0的強連通分量個數 );
注意的地方:假如原圖就是乙個強連通圖。則顯然q2是0.
kosaraju:
view code
1//file name: 1236.cpp2//
author: missa3//
created time: 2013/2/6 星期三 19:44:12
45 #include6 #include7 #include8 #include9 #include10 #include11 #include12 #include
13 #include14 #include15 #include16
using
namespace
std;
1718
const
int maxn = 1e2+5;19
intn;
20 vectoradj[maxn];
21 vectorradj[maxn];
22 vectorord;
23bool
vis[maxn];
24int
ma[maxn];
25int
cnt;
26void
init()
2733
ord.clear();
34 cnt=0;35
}36void dfs1(int
v)37
44void dfs2(int
v)45
52void
kosaraju()
5368}69
}70void
read()
7181}82
}83void
solve()
8498}99
for(int i=1;i<=cnt;i++)
100104 printf("
%d\n
",ans1);
105if(cnt==1)//
原圖是乙個強連通分量
106 printf("
0\n"
);107
else
108 printf("
%d\n
",max(ans1,ans2));
109}
110int
main()
111119
return0;
120 }
POJ 1236 強連通分量
題目鏈結 翻譯一下題目吧,大致含義就是,有n個學校,現在要向n個學校傳遞乙個軟體,如果a學校願意支援b學校,那麼給了a,a就會給b,但是a支援b但是b不一定支援a 有向圖警告 要求什麼呢,最少給多少個學校就可以給到全部的學校,最少加幾個支援關係,可以使得給任意乙個學校就可以傳遞到全部學校去。思路 第...
poj1236 強連通分量 縮點
題意 n 2 題解 找強連通分量,縮點。記f i 為縮完點後的新圖中各點入度,g i 為出度,ans1為f i 0的點的數目,ans2為g i 0的點的數目則第一問為ans1,第二問則為max。至於第二問的解釋,我的想法是對於得到的dag圖,考慮其中的出度為0的點和入度為0的點組成的點集v,將這些點...
poj 1236 強連通分量 縮點
有向無環圖中所有入度不為0的點,一定 可以由某個入度為0的點出發可達。假定有 n 個入度為0的點,m個出度為0的點,max m,n 就是第二個問題的解。include include include include include include include using namespace st...