zzulioj 1918 二分最大匹配

2021-07-16 20:17:32 字數 1313 閱讀 8424

time limit: 1 sec  

memory limit: 128 mb

submit: 345  

solved: 78

submit

status

web board

晴天也來尋寶啦,有乙個m層的寶塔,只能從第一層開始一層一層的往上走,每層都有乙個門,你需要用鑰匙來開啟門才能繼續走,現在晴天有n把鑰匙,編號為0-n-1,然後他要開始尋寶了。沒有特殊技能怎麼好意思出來尋寶呢,他現在有兩個天賦技能,他知道第i層的門可以用編號為a和b的鑰匙開啟(可能a等於b呦),然後他還可以在進入寶塔前把門的順序任意調換一次,也就是說比如可以把m層原來的1 2 3 ..m,換為 m ...3 2 1.晴天想知道他最多能拿到多少層的寶物。

第一行乙個整數t表示有多少組測試例項

每組資料第一行為兩個整數n,m分別表示有多少個鑰匙,有多少層。

接下來m行,每行兩個數字x,y,第i行表示第i層的門可以用標號x或y的鑰匙開啟。

(n,m<=1000)

輸出乙個整數表示最多可以上多少層。1

3 4

0 1

0 1

0 1

1 23

在樣例中,在進入寶塔前,將門的順序換為4 1 2 3.然後前三層分別使用2 0 1三把鑰匙拿到前三層的寶物

**1:(省時間,省記憶體)memory : 924  ,time :11

#include#include#include#includeusing namespace std;

const int m=1010;

vectorvec[m];

int mark[m];

bool vis[m];

bool find(int u)

//vec[i].push_back(x);

//vec[i].push_back(y);

} for(i=0;i<=n;i++)

int ans=0;

for(i=1;i<=m;i++)

printf("%d\n",ans);

} return 0;

}

**2:(費時,費空間)

memory : 4860   ,time :140

#include#include#includeusing namespace std;

int map[1010][1010];

int match[1010];

bool vis[1010];

int n,m;

bool find(int u)

{ for(int i=0;i

P1918 保齡球 (簡單二分)

dl 算緣分算得很煩悶,所以常常到體育館去打保齡球解悶。因為他保齡球已經打了幾十年了,所以技術上不成問題,於是他就想玩點新花招。dl 的視力真的很不錯,竟然能夠數清楚在他前方十公尺左右每個位置的瓶子的數量。他突然發現這是乙個炫耀自己好視力的藉口 他看清遠方瓶子的個數後從某個位置發球,這樣就能打倒一定...

ZZULIOJ 1152 二分搜尋

在有序序列中查詢某一元素x。首先輸入乙個正整數n n 100000 表示該序列有n個整數,然後按從小到大的順序輸入n個整數 接著是乙個正整數m,表示有m次查詢 最後是m個整數,表示m個要查詢的整數x。對於每一次查詢,有一行輸出。若序列中存在要查詢的元素x,則輸出元素x在序列中的序號 序號從0開始 若...

zzulioj1152 二分搜尋

zzulioj1152 二分搜尋 在有序序列中查詢某一元素x。首先輸入乙個正整數n n 100000 表示該序列有n個整數,然後按從小到大的順序輸入n個整數 接著是乙個正整數m,表示有m次查詢 最後是m個整數,表示m個要查詢的整數x。對於每一次查詢,有一行輸出。若序列中存在要查詢的元素x,則輸出元素...