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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

hihocoder 1127 : 二分图三·二分图最小点覆盖和最大独立集

發布時間:2025/3/16 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 hihocoder 1127 : 二分图三·二分图最小点覆盖和最大独立集 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

最大獨立集問題:

在圖G中選取盡可能多的點,使得任意兩個點之間沒有連邊。

結論:最大獨立集的點數 = 總點數 - 二分圖最大匹配

證明:

假設最大獨立集的點數為|U|,二分圖最大匹配的匹配數為|M|,最大匹配中所有頂點集合為EM

先證明 |U|≤|V|-|M|

M中任意一條邊的兩個端點是連接的,所有對于M中的邊必有一個端點不在|U|集合中,所以|M|≤|V|-|U|

再證明|U|≥|V|-|M|

首先我們知道一定有|U|≥|V|-|EM|,即將最大匹配的點刪除之后,剩下的點一定都不相連。
接下來我們考慮能否將M集合中的一個端點放入U中:
假設(x,y)屬于M,存在(a,x),(b,y),且a,b都在U中,則會出現兩種情況:

  • 如果(a,b)連接,則有一個更大的匹配存在,矛盾
  • 如果(a,b)不連接,a->x->y->b有一個新的增廣路,因此有一個更大的匹配,矛盾
    故有a,b兩點中至多只有1個點屬于U,則我們總是可以選取x,y中一個點放入集合U
    所以|U|≥|V|-|EM|+|M|=|V|-|M|

    綜上有|U|=|V|-|M|


    最小點覆蓋問題:

    在圖G中選取盡可能少的點,使得圖中每一條邊至少有一個端點被選中。即用最少的點去覆蓋所有的邊。

    結論:最小點覆蓋的點數 = 二分圖最大匹配

    其實最小點覆蓋的點數=二分圖最大匹配這個結論可以很直觀地感受,假設最小點集合里面的一個頂點為V,那么與V相鄰的邊都能夠被它給覆蓋掉,那么與這條邊對應的另一端頂點就不需要考慮了,并且在最大匹配的點集合中,必定有一半的點所關連的邊不止一條。所以可以很直觀地得到這個結論。



    #include<iostream> #include<cstdio> #include<cstring> using namespace std;const int maxn = 1001; int n,m,belong[maxn]; bool vis[maxn],line[maxn][maxn];bool find(int x) {for(int i = 1; i <= n; i++){if(line[x][i] == true && vis[i] == false){vis[i] = true;if(belong[i] == 0 || find(belong[i]) == true){belong[i] = x;return true;}}}return false; }int main() { while(scanf("%d%d",&n,&m)!=EOF){for(int i = 1; i <= m; i++){int u,v;scanf("%d%d",&u,&v);line[u][v] = line[v][u] = true;}int ans = 0;for(int i = 1; i <= n; i++){memset(vis,false,sizeof(vis));if(find(i)) ans++;}printf("%d\n%d\n",ans/2,n-ans/2);}return 0; }

總結

以上是生活随笔為你收集整理的hihocoder 1127 : 二分图三·二分图最小点覆盖和最大独立集的全部內容,希望文章能夠幫你解決所遇到的問題。

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