1. 程式人生 > >【bzoj1143】 CTSC2008祭祀river 二分圖匹配

【bzoj1143】 CTSC2008祭祀river 二分圖匹配

貌似是我想少了,二分圖不止只有最大匹配,先寫一些結論吧,等著總結一下。

參考:http://endlesscount.blog.163.com/blog/static/821197872012622103810976/

二分圖最小點覆蓋(每條邊至少一個頂點在集合裡)=最大匹配

二分圖最小邊覆蓋(每個點至少連一條邊)=二分圖點數-最大匹配

證明:考慮最大匹配後,每個未匹配的點連出一條邊,即為最小邊覆蓋=二分圖點數-2*最大匹配+最大匹配=二分圖點數-最大匹配。

二分圖最大獨立集(點兩兩無邊)=二分圖點數-最小點覆蓋

有向無環圖最小不相交路徑覆蓋

把原圖中的每個點V拆成Vx和Vy,如果有一條有向邊A->B,那麼就加邊Ax-By。這樣就得到了一個二分圖,最小路徑覆蓋=原圖的節點數-新圖最大匹配。
       簡單證明:一開始每個點都獨立的為一條路徑,總共有n條不相交路徑。我們每次在二分圖裡加一條邊就相當於把兩條路徑合成了一條路徑,因為路徑之間不能有公共點,所以加的邊之間也不能有公共點,這就是匹配的定義。所以有:最小路徑覆蓋=原圖的節點數-新圖最大匹配。 有向無環圖最小可相交路徑覆蓋 先floyd求出連通性後,最小不相交路徑覆蓋。 這道題是裸的二分圖最大獨立集,對於原圖的點x、y,如果聯通,則從ax向by連一條邊,最後要求選中的點之間沒有連邊即求最大獨立集。
#include<cstdio>
#include<cstring>
#include<cstdlib>
#include<cmath>
#include<iostream>
#include<algorithm>
#define maxn 110

using namespace std;

int a[maxn][maxn],lk[maxn],f[maxn][maxn];
bool vis[maxn];
int n,m;

bool find(int x)
{
	for (int i=1;i<=n;i++)
	  if (a[x][i] && !vis[i])
	  {
	  	vis[i]=1;
	  	if (!lk[i] || find(lk[i]))
	  	{
	  		lk[i]=x;
	  		return 1;
	  	}
	  }
	return 0;
}

int main()
{
	scanf("%d%d",&n,&m);
	for (int i=1;i<=m;i++)
	{
		int x,y;
		scanf("%d%d",&x,&y);
		f[x][y]=1;
	}
	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 (f[i][j] && i!=j) a[i][j]=1;
	int ans=n;
	for (int i=1;i<=n;i++)
	{
		memset(vis,0,sizeof(vis));
		if (find(i)) ans--;
	}
	printf("%d\n",ans);
	return 0;
}


相關推薦

bzoj1143 CTSC2008祭祀river 二分匹配

貌似是我想少了,二分圖不止只有最大匹配,先寫一些結論吧,等著總結一下。 參考:http://endlesscount.blog.163.com/blog/static/8211978720126221

bzoj1143[CTSC2008]祭祀river Floyd+網路流最小割

在遙遠的東方,有一個神祕的民族,自稱Y族。他們世代居住在水面上,奉龍王為神。每逢重大慶典, Y族都 會在水面上舉辦盛大的祭祀活動。我們可以把Y族居住地水系看成一個由岔口和河道組成的網路。每條河道連線著 兩個岔口,並且水在河道內按照一個固定的方向流動。顯然,水系中

BZOJ 1143: [CTSC2008]祭祀river 二分,最大獨立集,Floyd閉包

Description   在遙遠的東方,有一個神祕的民族,自稱Y族。他們世代居住在水面上,奉龍王為神。每逢重大慶典, Y族都 會在水面上舉辦盛大的祭祀活動。我們可以把Y族居住地水系看成一個由岔口和河道組成的網路。每條河道連線著 兩個岔口,並且水在河道內按

bzoj 1143:[CTSC2008]祭祀river 二分最大獨立集

  在遙遠的東方,有一個神祕的民族,自稱Y族。他們世代居住在水面上,奉龍王為神。每逢重大慶典, Y族都 會在水面上舉辦盛大的祭祀活動。我們可以把Y族居住地水系看成一個由岔口和河道組成的網路。每條河道連線著 兩個岔口,並且水在河道內按照一個固定的方向流動。顯然,水系中不會有環流(下圖描述一個環流的例子)。  

bzoj2744[HEOI2012]朋友圈 二分匹配

算是一道好題了吧,竟然自己想出來了。 首先如果是一般圖的最大團,那麼肯定是不可做,所以這道題的條件一定有什麼性質。 仔細一看,對於A國,我們分成奇數和偶數兩類點,我們發現邊全都是在兩類點之間的,同類點之間沒有邊。 這不是一個二分圖嘛?二分圖的最大團?嘿嘿嘿,最大為2吧。 再

BZOJ1059矩陣遊戲(二分最大匹配

set 交換 tdi namespace 顏色 pac 連線 include amp 題意:矩陣遊戲在一個N*N黑白方陣進行。每次可以對該矩陣進行兩種操作: 行交換操作:選擇矩陣的任意兩行,交換這兩行(即交換對應格子的顏色) 列交換操作:選擇矩陣的任意行列,交換這兩列(即交

EOJ3652乘法還原(二分

題意: 思路:Orz Claris 先找出所有平方項,將與有平方項的數有關的數對暫時忽略,剩下的直接連邊就是一張二分圖,暴力DFS染色 將有平方項的數兩邊都加一個,再判字典序即可 我不會判字典序……耽誤了一個下午 1 #include<cstdio> 2 #includ

bzoj1143 CTSC2008祭祀river(最大獨立集--二分匹配

題目: 我是超連結 題解: 尋找一個最大點集A,滿足∀u,v∈V,(u,v)∉E  二分圖的最大獨立集=頂點數-最大匹配  程式碼: #include <cstdio> #include

bzoj1143: [CTSC2008]祭祀river有向無環的最長反鏈

1143: [CTSC2008]祭祀river Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 3192  Solved: 1632 [Submit][Status][Discuss] Description   在遙遠

[BZOJ1143][CTSC2008]祭祀river(Dilworth定理+二分匹配)

algorithm 傳遞閉包 轉化 進一步 freopen eof memset nbsp 二分圖 題意:給你一張n個點的DAG,最大化選擇的點數,是點之間兩兩不可達。 要從Dilworth定理說起。 Dilworth定理是定義在偏序集上的,也可以從圖論的角度解釋

2018.10.11BZOJ1143CTSC2008祭祀river(最長反鏈)

傳送門 解析: 有DilworthDilworthDilworth定理: 最長反鏈長度===最小鏈覆蓋數。 證明我覺得VfleakingVfleakingVfleaking的部落格寫得很好%%%%%%

bzoj1143: [CTSC2008]祭祀river二分匹配

題目傳送門 題面有點坑(對於我這種不讀題面的人來說) 題面上有個大大的圖。我看了一下好像是環誒。 我就以為這題有環。 一開始 我想: 既然有環,那麼我用強聯通縮點之後每個環最多隻能選出一個點咯。 然後我再在剩下的點裡面求點集,使兩兩不能互相到達。

BZOJ1143CTSC2008祭祀river 傳遞閉包、最大點獨立集(網路流寫的)

#include <stdio.h> int main() { puts("轉載請註明出處謝謝"); puts("http://blog.csdn.net/vmurder/artic

[二分最大獨立集]BZOJ 1143—— [CTSC2008]祭祀river

題目梗概 給定一張有向圖,在這個圖上的一些節點放上標記且任意標記節點不被其他標記節點到達。 使標記節點個數最大化。 解題思路 對於每一個點還是進行拆點操作,這樣就形成一張二分圖。 題目答案顯然就是二分圖的最大獨立集。 最大獨立集=n-最小頂點覆蓋

二分匹配 模板

print front space namespace spl ide ons urn sca 1 #include <algorithm> 2 #include <cstring> 3 #include <cstdio&g

洛谷—— P3386 模板二分匹配

blank lan print 一個 dfs com 二分 i++ bool https://www.luogu.org/problem/show?pid=3386 題目背景 二分圖 題目描述 給定一個二分圖,結點個數分別為n,m,邊數為e,求二分圖最大匹配數 輸

二分匹配入門專題1E - Air Raid hdu1151最小路徑覆蓋

eno rate ask return red size all file 痛苦 Consider a town where all the streets are one-way and each street leads from one intersection to

二分匹配入門專題1F - COURSES poj1469最大匹配--匈牙利算法模板題

nbsp possible count dfs positive owin not hat first Consider a group of N students and P courses. Each student visits zero, one or more t

二分匹配入門專題1D - Matrix hdu2119最小頂點覆蓋

sample ins ever != sca either dfs ret int Give you a matrix(only contains 0 or 1),every time you can select a row or a column and delete

二分匹配入門專題1M - Cyclic Tour hdu1853km算法--判斷自重邊

初始化 case test case 思路 contain first rst ant eve There are N cities in our country, and M one-way roads connecting them. Now Little Tom wa