Acwing 405 將他們分好隊

2022-04-29 06:00:08 字數 1186 閱讀 6474

大型補檔計畫

題目鏈結

看到分成兩組,想到二分圖判定 + 染色。

二分圖的特點是兩個有矛盾的點連一條邊,考慮在這道題中,如果 \(a, b\) 中有乙個人不認識對方(或者兩個人互不認識),就不可能分在一組,可以在 \((a, b)\) 連一條無向邊。

但是由於圖不連通,每個聯通塊染色跑出兩種顏色的數量 \(c_1, c_2\) 後(跑不出來無解),讓兩隊數量接近,等價於讓一隊的數量 $ <= \frac$ 且最大,我們可以把這兩個當做一組,把 \(cnt\) 個聯通塊當做物品,做分組揹包選出一隊的人員(並且強制選擇),因為答案輸出任意一組方案,倒序遞推出答案即可。

切忌強制轉移!因為不強制轉移可能出現一組都不選,而題目要求每個隊員必須在一隊(會 wa 53)

#include #include #include #include using namespace std;

const int n = 105;

int n, c1, c2, cnt, col[n], vis[n];

int f[n][n], a[n][n], b[n][n], d[n];

vectorans[2];

bool g[n][n];

bool dfs(int u, int t, int c) else if(col[v] == c) return false;

} }

return true;

}void work(int i, int j)

int main()

} int v = n >> 1;

for (int i = 1; i <= n; i++)

for (int j = v; j >= 0; j--)

if (j >= c2 && f[cnt - 1][j - c2] + c2 >= f[cnt][j])

}} }

int res = 0, t = -1;

for (int i = 0; i <= v; i++)

if (f[cnt][i] > res) res = f[cnt][i], t = i;

work(cnt, t);

for (int i = 1; i <= n; i++)

for (int i = 0; i < 2; i++)

return 0;

}

AcWing 40 順時針列印矩陣

題目描述 輸入乙個矩陣,按照從外向裡以順時針的順序依次列印出每乙個數字。樣例輸入 1,2,3,4 5,6,7,8 9,10,11,12 輸出 1,2,3,4,8,12,11,10,9,5,6,7 分析 方法一 首先當模擬題暴力模擬一遍,鍛鍊下思維。class solution i j while i...

AcWing 日期問題

小明正在整理一批歷史文獻。這些歷史文獻 現了很多日期。小明知道這些日期都在1960年1月1日至2059年12月31日。令小明頭疼的是,這些日期採用的格式非常不統一,有採用年 月 日的,有採用月 日 年的,還有採用日 月 年的。更加麻煩的是,年份也都省略了前兩位,使得文獻上的乙個日期,存在很多可能的日...

AcWing 小貓爬山

翰翰和達達飼養了n只小貓,這天,小貓們要去爬山。經歷了千辛萬苦,小貓們終於爬上了山頂,但是疲倦的它們再也不想徒步走下山了 嗚咕 翰翰和達達只好花錢讓它們坐索道下山。索道上的纜車最大承重量為w,而n只小貓的重量分別是c1 c2 cn。當然,每輛纜車上的小貓的重量之和不能超過w。每租用一輛纜車,翰翰和達...