description
考慮乙個連通的無向圖,可以知道,任意兩個節點都可以通過一條路徑連線起來。在所有節點中,某些節點向所有與它連通的節點提供a服務(包括向它自己),同時某些節點向所有與它連通的節點提供b服務(也包括向它自己)。注意乙個節點也可能同時提供a、b兩種服務。
當圖中的某條邊e被去掉的時候,如果圖中有任何乙個點無法接受a服務或者接受b服務,我們稱e邊為關鍵邊。
那麼,你需要做的事情就是:
1、輸出圖中存在多少關鍵邊;
2、從小到大輸出所有這樣的關鍵邊的編號。
input
輸入檔案共m+3行。第1行輸入4個整數n,m,k和l。n表示圖中的節點個數,m是圖中邊的數目,k是提供a服務的點的個數,l是提供b服務的點的個數。第2行輸入k個數,分別表示哪些點提供a服務。第3行輸入l個數,分別表示哪些點提供b服務。接下來m行每行輸入兩個數p,q表示節點p和節點q之間有一條無向邊。節點從1至n編號,邊按從讀入順序從1至m編號。
output
輸出檔案第1行輸出乙個數s,表示該網路中存在s條關鍵邊,接下來輸出s行,每行輸出一條關鍵邊編號。請按編號從小到大(讀入順序編號)輸出。
sample input
9 10 3 4
2 4 5
4 9 8 3
1 24 1
2 34 2
1 55 6
6 76 8
7 98
sample output336
9
hint
每個測試點2s。
對於15%的資料,n<=30,m<=30,k<=5,l<=5;
對於35%的資料,n<=400,m<=400,k<=30,l<=30;
對於50%的資料,n<=3000,m<=3500,k<=100,k<=100。
對於100%的資料,n<=100000,m<=100000,k<=10000,l<=10000。
保證沒有重邊和自環。
題解求割邊就算當一條邊滿足起點的dfn小於終點的low。
並且乙個割邊將圖分成搜尋樹中其連線的子和其上面的一塊。我們可以記錄兩個陣列a[i],b[i]來記錄搜尋樹中以i為節點,這顆子樹的a,b服務有多少個。
當乙個邊的終點的a或b為0,代表其子樹是通過其上面的點得到a,b服務,去掉邊就無法獲得。
或者是乙個邊的終點的a或b為k或l。代表如果沒有這條邊,起點就沒有服務。
這樣就可以記錄答案。
#include
#include
#include
#include
#include
#include
#include
#define maxn 200000+10
#define maxm 200000+10
using
namespace
std;
int head[maxn],num,n,m,l,k;
int dfn[maxn],low[maxn],vis[maxn],dfnum,root,son;
int ans[maxm],cnt[maxm],a[maxn],b[maxn];
stack
st;
struct edgeedge[maxm*2];
void add(int from,int to)
void tarjan(int x,int fa)
ta+=a[edge[i].to];
tb+=b[edge[i].to];
}}else
if(vis[edge[i].to])
low[x]=min(low[x],dfn[edge[i].to]);
}}int main()
for(int i=1;i<=n;i++)
if(!dfn[i]) tarjan(i,i);
sort(ans+1,ans+ans[0]+1);
printf("%d\n",ans[0]);
for(int i=1;i<=ans[0];i++)
return
0;}
POJ 3204 網路流的必須邊
思路 求一遍網路流 在殘餘網路上dfs 從起點dfs 從終點把邊反向dfs 乙個邊跟起點連通 跟終點反向的邊連通 ans 注 此題不能用tarjan 因為有邊權為0的邊 by siriusren include include include include using namespace std ...
UVA11248 網路擴容(列舉割邊擴充)
題意 給你乙個有向圖,問你從1到n的最大流是多少?如果流量大於等於c那麼直接輸出乙個串,否則輸出只擴充一條邊的流量就可以達到1 n大於等於c的所有邊,如果擴充不了就 輸出另乙個串。sample input 4 4 5 1 2 5 1 3 5 2 4 5 3 4 5 4 4 5 1 2 1 1 3 5...
hdu 4280 網路流 sap 點邊資料很大
匆匆過客 題意 有n個島嶼 m條無向路 每個路有一最大允許的客流量,求從最西的那個島嶼最多能運用多少乘客到最東的那個島嶼。思路 很單純的網路流,重點是卡時間 模板的高效性很重要啊該模板詳解 參見這裡 模板題就不注釋了 include include define vm 100010 define e...