BZOJ 1143: [CTSC2008]祭祀river 二分圖,最大獨立集,Floyd閉包
Description
在遙遠的東方,有一個神祕的民族,自稱Y族。他們世代居住在水面上,奉龍王為神。每逢重大慶典, Y族都
會在水面上舉辦盛大的祭祀活動。我們可以把Y族居住地水系看成一個由岔口和河道組成的網路。每條河道連線著
兩個岔口,並且水在河道內按照一個固定的方向流動。顯然,水系中不會有環流(下圖描述一個環流的例子)。
由於人數眾多的原因,Y族的祭祀活動會在多個岔口上同時舉行。出於對龍王的尊重,這些祭祀地點的選擇必
須非常慎重。準確地說,Y族人認為,如果水流可以從一個祭祀點流到另外一個祭祀點,那麼祭祀就會失去它神聖
的意義。族長希望在保持祭祀神聖性的基礎上,選擇儘可能多的祭祀的地點。
Input
第一行包含兩個用空格隔開的整數N、M,分別表示岔口和河道的數目,岔口從1到N編號。接下來M行,每行包
含兩個用空格隔開的整數u、v,描述一條連線岔口u和岔口v的河道,水流方向為自u向v。 N ≤ 100 M ≤ 1 000
Output
第一行包含一個整數K,表示最多能選取的祭祀點的個數。
Sample Input
4 4
1 2
3 4
3 2
4 2
Sample Output
2
【樣例說明】
在樣例給出的水系中,不存在一種方法能夠選擇三個或者三個以上的祭祀點。包含兩個祭祀點的測試點的方案有兩種:
選擇岔口1與岔口3(如樣例輸出第二行),選擇岔口1與岔口4。
水流可以從任意岔口流至岔口2。如果在岔口2建立祭祀點,那麼任意其他岔口都不能建立祭祀點
但是在最優的一種祭祀點的選取方案中我們可以建立兩個祭祀點,所以岔口2不能建立祭祀點。對於其他岔口
至少存在一個最優方案選擇該岔口為祭祀點,所以輸出為1011。
解題方法: 二分圖的一些結論: 寫得非常詳細
這道題是裸的二分圖最大獨立集,對於原圖的點x、y,如果聯通,則從ax向by連一條邊,最後要求選中的點之間沒有連邊即求最大獨立集。
#include <bits/stdc++.h>
using namespace std;
const int maxn = 110;
int a[maxn][maxn], Link[maxn], f[maxn][maxn];
bool vis[maxn];
int n, m;
bool dfs(int x){
for(int i = 1 ; i <= n; i++){
if(a[x][i] && !vis[i]){
vis[i] = 1;
if(!Link[i] || dfs(Link[i])){
Link[i] = x;
return 1;
}
}
}
return 0;
}
int main(){
scanf("%d%d", &n, &m);
for(int i = 1; i <= m; i++){
int u, v;
scanf("%d%d", &u, &v);
f[u][v] = 1;
}
//Floyd閉包
for(int k = 1; k <= n; k++){
for(int i = 1; i <= n; i++){
for(int j = 1; j <= n; j++){
f[i][j] |= f[i][k] && f[k][j];
}
}
}
for(int i = 1; i <= n; i++){
for(int j = 1; j <= n; j++){
if(i != j && f[i][j]) a[i][j] = 1;
}
}
int ans = n;
for(int i = 1; i <= n; i++){
memset(vis, 0, sizeof(vis));
if(dfs(i)) ans--;
}
printf("%d\n", ans);
return 0;
}
相關推薦
BZOJ 1143: [CTSC2008]祭祀river 二分圖,最大獨立集,Floyd閉包
Description 在遙遠的東方,有一個神祕的民族,自稱Y族。他們世代居住在水面上,奉龍王為神。每逢重大慶典, Y族都 會在水面上舉辦盛大的祭祀活動。我們可以把Y族居住地水系看成一個由岔口和河道組成的網路。每條河道連線著 兩個岔口,並且水在河道內按
bzoj 1143:[CTSC2008]祭祀river 二分圖最大獨立集
在遙遠的東方,有一個神祕的民族,自稱Y族。他們世代居住在水面上,奉龍王為神。每逢重大慶典, Y族都 會在水面上舉辦盛大的祭祀活動。我們可以把Y族居住地水系看成一個由岔口和河道組成的網路。每條河道連線著 兩個岔口,並且水在河道內按照一個固定的方向流動。顯然,水系中不會有環流(下圖描述一個環流的例子)。
Prime Independence LightOJ - 1356(二分圖匹配+最大獨立集)
題目連結:qaq 題意:給你一堆數,讓你找出最大一組數裡面不存在一個整數是另一個整數的素數倍,輸出最大數量。 思路:將數按質因子的數量奇偶分邊,然後將素數倍兩個整數=連邊。最後就是求最大獨立集的方法了
二分圖匹配 --- 最大獨立集
結論 : 最大獨立集 = 結點總數 - 最大匹配數(最小點覆蓋數). //解釋: 最大獨立集, 即選擇儘量多的結點, 使得任意兩個節點不相鄰(即任意一條邊的兩個端點不會同時被選中), 最大獨立集和最
[二分圖最大獨立集]BZOJ 1143—— [CTSC2008]祭祀river
題目梗概 給定一張有向圖,在這個圖上的一些節點放上標記且任意標記節點不被其他標記節點到達。 使標記節點個數最大化。 解題思路 對於每一個點還是進行拆點操作,這樣就形成一張二分圖。 題目答案顯然就是二分圖的最大獨立集。 最大獨立集=n-最小頂點覆蓋
【bzoj1143】 CTSC2008祭祀river 二分圖匹配
貌似是我想少了,二分圖不止只有最大匹配,先寫一些結論吧,等著總結一下。 參考:http://endlesscount.blog.163.com/blog/static/8211978720126221
【LA3415 訓練指南】保守的老師 【二分圖最大獨立集,最小割】
style ide using algorithm lar 音樂 \n ios 學生 題意 Frank是一個思想有些保守的高中老師。有一次,他需要帶一些學生出去旅行,但又怕其中一些學生在旅行中萌生愛意。為了降低這種事情發生的概率,他決定確保帶出去的任意兩個學生至少要滿
BZOJ 3158 千鈞一發 (最大流->二分圖帶權最大獨立集)
con scan 拆點 color http 容易 getchar() cstring targe 題面:BZOJ傳送門 和方格取數問題很像啊 但這道題不能像網格那樣黑白染色構造二分圖,所以考慮拆點建出二分圖 我們容易找出數之間的互斥關系,在不能同時選的兩個點之間連一
hdu2768Cat vs. Dog (反建法,最大獨立集)
ats pin cer class ive second desc show memory Cat vs. Dog Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/O
[BZOJ4808] 馬(最大獨立集,最大流)
匹配 truct esp urn ont code freopen pop += 題目鏈接:http://www.lydsy.com/JudgeOnline/problem.php?id=4808 題意:其實就是找出一個點集的子集,使得這個子集中的點互不相連。求這個子集規模
求樹的最大獨立集,最小點覆蓋,最小支配集 貪心and樹形dp
www 子節點 最大獨立集 com 倒序 最小支配集 交流 屬於 else 目錄 求樹的最大獨立集,最小點覆蓋,最小支配集 三個定義 貪心解法 樹形DP解法 (有任何問題歡迎留言或私聊&&歡迎交流討論哦 求樹的最大獨立集,最小點覆蓋,最小支配集 三個
最小支配集,最小點覆蓋,最大獨立集(貪心/DP)
最小支配集(minimal dominating set):對於圖G=(V,E)來說,設V'是圖G的一個支配集,則對於圖中的任意一個頂點u,要麼屬於集合V',要麼與V'中的頂點相連。 在V'中除去任何元素後V'不再是支配集,則支配集V'是極小支配集。稱G中所有支配集中頂點個
最小點覆蓋,最小邊覆蓋,最大匹配,最小路徑覆蓋,最大獨立集總結。
如果沒有申明是什麼圖預設是二分圖 最小點覆蓋: 點覆蓋的概念定義: 對於圖G=(V,E)中的一個點覆蓋是一個集合S⊆V使得每一條邊至少有一個端點在S中。 最小點覆蓋:就是中點的個數最少的S集
HDU5556:Land of Farms(圖的最大獨立集 & 最大團)
Farmer John and his brothers have found a new land. They are so excited and decide to build new farms on the land. The land is a rectangle and consists of
洛谷P2774 方格取數問題 BZOJ 1143祭祀river【二分圖最大獨立集】
網絡 方格取數 == 二分圖最大獨立集 ostream pro 就會 最大流 HR 講解前首先引入兩個概念 二分圖最小點覆蓋集 定義: 在二分圖中求出一個最小點集 使得圖中任意一條邊至少有一個端點在點集內 解法: 對二分圖進行最大匹配 最大匹配數就是二分圖的最小點覆蓋集包含
【bzoj1143 CTSC2008】祭祀river(最大獨立集--二分圖匹配)
題目: 我是超連結 題解: 尋找一個最大點集A,滿足∀u,v∈V,(u,v)∉E 二分圖的最大獨立集=頂點數-最大匹配 程式碼: #include <cstdio> #include
[1143] [CTSC2008]祭祀river(最大獨立集 || 偏序集最大反鏈)
.com 網上 ext line const void getc inline sed 傳送門 網上說這是偏序集最大反鏈,然而我實在不理解。 所以我換了一個思路,先用floyed,根據點的連通性連邊, 問題就轉換成了找出最多的點,使任意兩個點之間不連邊,也就是最
1143: [CTSC2008]祭祀river
ble mic () status print ros span iostream 祭祀river Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 4018 Solved: 2048[Submit][Status][Disc
BZOJ 1143 祭祀river(floyd傳遞閉包+最大獨立集)
1143: [CTSC2008]祭祀river Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 3152 Solved: 1617 [Submit][Status][Discuss] Description 在遙
bzoj 1854: [Scoi2010]遊戲(二分圖的最大匹配)
1854: [Scoi2010]遊戲 Time Limit: 5 Sec Memory Limit: 162 MBSubmit: 3695 Solved: 1405 [Submit][Status][Discuss] Description lxhgww最近迷上了