日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

POJ 3041 Asteroids (对偶性,二分图匹配)

發布時間:2023/12/20 编程问答 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 POJ 3041 Asteroids (对偶性,二分图匹配) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

題目:POJ 3041 Asteroids?http://poj.org/problem?id=3041

分析

把位置下標看出一條邊,這顯然是一個二分圖最小頂點覆蓋的問題,Hungary就好。

挑戰

輸出一組可行解。構造,已知二分圖的兩個點集U和V,s-U-V-t,在最大匹配的殘留網絡里,選從s出發能到達的V中的點

沿途可以到達的U集中的點的路徑就都被覆蓋了,然后在選擇U集合中無法到達的點。對于二分圖中任意一條邊,其中必有一點屬于U集合,

所以前面選出的點集S是一個覆蓋。并且S中V和U對應的匹配邊是相斥的,總數確實等于總匹配邊數。(更具體的,可以想想U是怎么劃分的。)

如果最大匹配數記為M,最小點覆蓋記為C。那么的構造還可以說明M≥C。又因為匹配邊是平行的,所以至少要M個點才能覆蓋,C≥M。這樣

就得出了M = C的結論。

Code

/********************************************************* * ------------------ * * author AbyssalFish * **********************************************************/ #include<cstdio> #include<iostream> #include<string> #include<cstring> #include<queue> #include<vector> #include<stack> #include<vector> #include<map> #include<set> #include<algorithm> #include<cmath> using namespace std;typedef long long ll;const int maxn = 501, maxm = 1e4+1; int hd[maxn],to[maxm],nx[maxm],ec; #define eachEage int i = hd[u]; i; i = nx[i] void add(int u,int v) {nx[++ec] = hd[u];to[ec] = v;hd[u] = ec; }int link[maxn]; int vis[maxn], clk;bool dfs(int u) {vis[u] = clk;for(eachEage){int v = to[i], w = link[v];if(!w || (vis[w]!=clk && dfs(w))){link[v] = u;return true;}}return false; }//#define LOCAL int main() { #ifdef LOCALfreopen("in.txt","r",stdin); #endifint n,k; scanf("%d%d",&n,&k);for(int i = 0; i < k; i++){int r, c;scanf("%d%d",&r,&c);add(r,c);}int ans = 0;for(int i = 1; i <= n; i++){clk++;if(dfs(i)) ans++;}printf("%d\n", ans);return 0; }

?

轉載于:https://www.cnblogs.com/jerryRey/p/4947414.html

創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎

總結

以上是生活随笔為你收集整理的POJ 3041 Asteroids (对偶性,二分图匹配)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。