Sunny Code 1043極大匹配

2021-09-26 21:46:13 字數 1495 閱讀 4440

對給定的無向圖g=(v,e),如果邊集e'滿足:(1)e'是e的子集;(2)e'中的任意兩條邊都沒有公共頂點,那麼稱邊集e'為圖g的乙個匹配(matching)。而如果往e'中增加任意一條在e中但不在e'中的邊,都會導致e'不再是圖g的匹配,那麼稱e'為圖g的乙個極大匹配(maximal matching)。

(以上定義引自

根據上面的定義,請判斷一些給定的邊集是否是給定的無向圖的極大匹配。

每個輸入檔案一組資料。

第一行兩個整數n、m(1<=n<=1000, 0<=m<=n*(n-1)/2),表示頂點數和邊數,假設所有頂點的編號為1到n。

接下來m行,每行兩個正整數u、v(1<=u,v<=n, u!=v),表示一條邊的兩個端點編號。

然後乙個正整數k(k<=10),表示查詢個數。

接下來為k個查詢,每個查詢第一行為乙個正整數l,表示待查詢邊集的邊數,接下來l行每行兩個正整數,表示一條邊的兩個端點編號。資料保證每個查詢中相同的邊只會出現一次,且所有邊都在圖中存在。

每個查詢輸出一行,如果給定的邊集是極大匹配,那麼輸出yes;如果它是匹配但不是極大匹配,那麼輸出not maximal;如果不是匹配,那麼輸出not a matching

4 4

1 21 3

2 32 441

2 31

1 32

1 22 4

21 3

2 4

yes

not maximal

not a matching

yes

yes not maximal not a matching yes

shoutmon

19浙大考研機試模擬賽

#include #includeusing namespace std;

vector< int> g[1001];

int n,m,k,num;

bool vis[1001]=;

struct node

;bool operator<( node x, node y)

); }

cin>>k;

for(int i=0;i>num;

int f=0,f2=0;

sete1;

for(int j=0;j>a>>b;

if(vis[a]==true||vis[b]==true)

f=1;

vis[a]=true;

vis[b]=true;

e1.insert();

}if(f==0)

if(sum==sum1)

cout<<"yes"

cout<<"not maximal"<}

else

cout<<"not a matching"<}

return 0;

}

10 4 訪客名單

編寫乙個while迴圈,提示使用者輸入其名字。使用者輸入其名字後,在螢幕上列印一句問候語,並將一條訪問記錄新增到檔案guest book.txt中。確保這個檔案中的每條記錄都獨佔一行。with open e guest book.txt w as f while true message input...

104 貨倉選址

把a 1 a n 排序,設貨倉建在 x 座標處,x 左側的商店有 p 家,右側的商店有 q 家。若 p q 則把貨倉的選址向右移動 1 單位距離,距離之和就會減小 q p。同理,若 p q 則貨倉的位置想左移動會使距離之和變小。當 p q 時為最優解。因此貨倉應該建在中位數處,即把 a 排序後,當 ...

10 4每日部落格

首先是將資料匯入到hive資料庫中,我使用的是以下的方法 將乙個csv或txt匯入hive 先修改格式為txt 第一行資料為列名,根據列名在hive建表 create table watermelon id string,color string,root string,stroke string,...