給出乙個無向圖g的頂點v和邊e。進行q次查詢,查詢從g的某個頂點v[s]到另乙個頂點v[t],是否存在2條不相交的路徑。(兩條路徑不經過相同的邊)
(注,無向圖中不存在重邊,也就是說確定起點和終點,他們之間最多只有1條路)
收起輸入
第1行:2個數m n,中間用空格分開,m是頂點的數量,n是邊的數量。(2 <= m <= 25000, 1 <= n <= 50000)
第2 - n + 1行,每行2個數,中間用空格分隔,分別是n條邊的起點和終點的編號。例如2 4表示起點為2,終點為4,由於是無向圖,所以從4到2也是可行的路徑。
第n + 2行,乙個數q,表示後面將進行q次查詢。(1 <= q <= 50000)
第n + 3 - n + 2 + q行,每行2個數s, t,中間用空格分隔,表示查詢的起點和終點。
輸出共q行,如果從s到t存在2條不相交的路徑則輸出yes,否則輸出no。
輸入樣例
4 41 2
2 31 3
1 45
1 22 3
3 12 4
1 4輸出樣例
yesyes
yesno
no題意:給出乙個無向圖g的頂點v和邊e。進行q次查詢,查詢從g的某個頂點v[s]到另乙個頂點v[t],是否存在2條不相交的路徑。(兩條路徑不經過相同的邊)
思路:邊雙聯通分量模板題
ac**:
#include
#include
#include
#include
using
namespace std;
const
int size=
100010
;int head[size]
,ver[size*2]
,next[size*2]
;int dfn[
100010
],low[size]
,n,m,tot,num=0;
bool bridge[size*2]
;void
add(
int x,
int y)
void
tarjan
(int x,
int in_edge)
}else}}
int c[size]
;void
dfs(
int x,
int dcc)
}int
main()
for(
int i=
1;i<=n;i++)if
(!dfn[i]
)tarjan
(i,0);
for(
int i=
1;i<=n;i++)if
(!c[i]
)int w;
cin>>w;
while
(w--
)}
這道題過的很迷,本來挺簡單的,就是過不了,改了兩天也過不了,後來沒法了比著從打了一遍就過了。。。。真心無語。。。
錯誤**:
#include
#include
#include
#include
using
namespace std;
const
int size=
100010
;int head[size]
,ver[size*2]
,next[size*2]
;int dfn[size]
,low[size]
,n,m,tot,num;
bool bridge[size*2]
;void
add(
int x,
int y)
void
targan
(int x,
int in_edge)
}else}}
int c[size]
;void
dfs(
int x,
int dcc)
}int
main()
for(
int i=
1;i<=m;i++)if
(!dfn[i]
)targan
(i,0);
for(
int i=
1;i<=n;i++)if
(!c[i]
)for
(int i=
1;i<=m;i++
)int w;
cin>>w;
while
(w--
)}
51NOD 1076 2條不相交的路徑
編輯 如果兩個頂點可以相互通達,則稱兩個頂點 強連通 strongly connected 如果 有向圖g的每兩個頂點都 強連通,稱g是乙個 強連通圖 有向圖的極大強連通子圖,稱為 強連通分量 strongly connected components 下圖中,子圖為乙個 強連通分量,因為頂點1,2...
51nod 1076 2條不相交的路徑(待完成)
1076 2條不相交的路徑 基準時間限制 1 秒 空間限制 131072 kb 分值 40 難度 4級演算法題 給出乙個無向圖g的頂點v和邊e。進行q次查詢,查詢從g的某個頂點v s 到另乙個頂點v t 是否存在2條不相交的路徑。兩條路徑不經過相同的邊 注,無向圖中不存在重邊,也就是說確定起點和終點...
51nod1078 3條不相交的路徑
題目 參考自洛谷p6658 這是一道三連通分量分解的模板提,具體的分析可以看洛谷的鏈結。通過分解三連通分量以後,這道題就變成了簡單的並查集問題。中的ans即三連通分量分解後的結果。大部分 自洛谷p6658的作者 這裡記錄的是三連通分量的模板 include include include inclu...