題解 DTOJ 3326 組隊(group)

2022-05-20 18:36:00 字數 1528 閱讀 8651

對於守望先鋒這種pvp遊戲,乙個團隊的搭配是非常重要的。

現在給你 \(n\) 個英雄,告訴你若干個形如 \((u,v)\) 的關係表示第 \(u\) 個英雄和第 \(v\) 個英雄相性很好。現在要你把這 \(n\) 個英雄分成兩部分,使得每個部分中的英雄互相之間相性都很好,如果存在一種分法,那麼輸出 \(「yes"\),否則輸出 \(「no」\)。

輸入格式:

第一行乙個整數 \(t\) 表示資料組數。

對於每組資料,第一行兩個整數 \(n,m\) ,分別表示英雄個數與相性好的對數。

接下來 \(m\) 行每行兩個整數 \(u,v\) 表示 \(u\) 與 \(v\) 之間相性很好。

保證每對關係只會出現一次。

輸出格式:

對於每組資料,輸出一行 \(「yes」\) 或者 \(「no」\)。

輸入樣例:

2

5 42 3

2 43 4

1 35 7

2 54 1

4 31 3

2 42 3

5 4

輸出樣例:
no

yes

對於 \(30\%\) 的資料,滿足 \(2≤n≤10\) 。

對於 \(100\%\) 的資料,滿足 \(2≤n≤10^3,m≤\frac,t≤10\) 。

建議使用快速讀入方式,保證輸入檔案大小在 \(15mb\) 以內。

二分圖的判斷。

利用二分圖的性質幫助判斷。

基本想法

題目可以化簡為:能否將所有點分成兩個圖,使得這兩個圖都為完全圖(完全圖內每個點都與其他的點至少有一條邊相連)。

改進

從反方向考慮題目,如果能夠分成兩個完全圖,那麼這個圖內的任意兩個點之間不能是相性不好

所以整個圖中所有相性不好的邊都是穿插在兩個圖中的,也就是相性不好的邊能形成二分圖

通過檢查該圖是否為二分圖即可判斷。

#include #define whd(a) while(a isdigit(c=getchar()))

#define xpp x=(x<<1)+(x<<3)+(c^48)

#define il inline

using namespace std;

const int maxn = 1e3+5;

int n, m, c[maxn];

bool t[maxn][maxn];

il int rd()

bool find(int x, int c)

return 1;

}int main()

if(find(1, 2)) puts("yes");

else puts("no");

}return 0;

}

注意反著建圖或者反著跑圖,題解採用的是反著跑圖。

0002組隊參賽規則

quote 乙個參賽隊伍不能超過三人,可以擁有乙個替補。包括替補在內任何參賽隊員必須為高中畢業五年內,才可以參賽,也就是說研究生一年級的學生還可以參加。現在的問題是給你乙個隊伍,請判斷這個隊伍是否合法。輸入資料 輸入資料報括若干組,每一組包括有若干行,第一行為乙個整數n,為這個隊伍的人數,接著有n行...

20110805 組隊賽 f題

測試資料有多組,對於每組資料,第一行為乙個整數n 1 n 10000 表示表示式中數字的個數,其後的第i 1行每行有乙個整數表示xi的值 1 i n 1 xi 1000000000 對於每組資料,如果你能幫阿里巴巴開啟石門,輸出yes,否則輸出no。58421143579 yesno 這是劉汝佳黑書...

BNUOJ 51280 組隊活動

題目 題意 中文題目!解題方法 dp i i個人的組隊方案數。dp 1,dp i sigma c i 1,j dp i 1 j 這個方程怎麼來的呢?考慮一下第i個人,在他前面有j個人,他可以選擇的方案數為c i 1,j 剩餘的i 1 j的方案數為dp i 1 j 根據乘法原理得到每個j的貢獻是c i...