題面
很好的\(tarjan\)練習題。
主要講一下如何建圖。
先用\(stl \ map\)把每個人的名字對映成數字。
輸入第\(i\)對夫妻時把女性對映成\(i\),把男性對映成\(i+n\)。
輸入相互喜歡過的情侶時將男性向女性連邊。
然後\(tarjan\)判斷\(i\)與\(i+n\)是不是在同乙個強連通分量裡即可。
今天是七夕節誒
#include #include #include #include #include #include #include #include #include #define gi gi
#define itn int
#define file(x) freopen(x".in","r",stdin);freopen(x".out","w",stdout)
using namespace std;
inline int gi()
while (c >= '0' && c <= '9')
return f * x;
}map ap; //map對映
int n, m, ans, sum, low[100003], dfn[100003], num, tot, head[100003], ver[100003], nxt[100003], sy[100003];
int cnt, sta[100003], vis[100003], kok;
inline void add(int u, int v)
void tarjan(int u)//tarjan過程
else if (vis[v]) low[u] = min(low[u], dfn[v]);
} if (dfn[u] == low[u])
while (y != u); }}
int main()
m = gi();
for (int i = 1; i <= m; i+=1)
for (int i = 1; i <= 2 * n; i+=1)
for (int i = 1; i <= n; i+=1)
return 0;
}
洛谷P1407 國家集訓隊 穩定婚姻
題目大意 有 n 對夫妻和 m 對情人,如果一對情人中的兩人都離婚了,那麼他們可以結為夫妻。對於每一對夫妻,若他們離婚後所有人依然可以結婚,那麼就是不安全的,否則是安全的。問每一對夫妻是否安全。題解 考慮 tarjan 縮點。把圖轉成有向圖,夫妻之間 g b 情人之間 b g tarjan 縮點,最...
P1407 國家集訓隊 穩定婚姻
國家集訓隊 穩定婚姻 嚴重懷疑這道題是用來虐狗的 給出 2 times n 個點,n 對點之間的關係 1 以及 m 對點的之間的關係 2 倘若有兩對滿足關係 1 的點能重新組成兩對滿足關係 2 的點,就輸出unsafe,否則輸出safe。同時題目中的點也分為兩類,一種是 男性 節點,一種是 女性 節...
題解 洛谷 P1935 國家集訓隊 圈地計畫
還是那個經典trick 最大價值 總價值 最小花費 每個位置都是二選一,考慮乙個魚刺型建圖。然後就是需要描述乙個,如果 x 選了第 p 種方案,那麼如果它的鄰點也選了第 p 種方案,就有 c 的代價,也就是有一條 c 流量的邊需要割掉。但是如果直接 s 連向每個格仔的邊流量為 a 每個格仔流向 t ...