魏遲燕的自走棋 題解 並查集 思維

2022-06-10 10:24:10 字數 1107 閱讀 3021

有\(n(n \leq 1e5)\)個人,\(m(m\leq 1e5)\)件裝備

每件裝備可以給1個或2個人,而且每件裝備有乙個戰力值,獲得這個裝備的人可以獲得此戰力值

要求每個人只能裝備一件裝備,每件裝備只能分配給乙個人。

求總戰力值最大

官方題解:

首先我們考慮把 m件裝備看作 m 條連線兩個點的邊(如果 k=1 則當成自環)。於是我們的問題轉化為選出一張邊權和最大的生成子圖。

考慮什麼樣的生成子圖是合法的。我們要求選中的邊能夠和點一一配對,顯然每個聯通塊的邊數不能超過點數。同時又因為每個聯通塊都至少有點數-1條邊,因此每個聯通快要麼是樹,要麼是基環樹。

乙個結論是每次都選最大邊一定不劣。

一旦我們選擇一條最大邊後,我們把兩個點縮成乙個點(選中非自環的情況),或者直接把這個點丟掉(選中自環的情況),就面臨乙個規模更小且完全一致的問題,可以繼續執行選取最大邊的策略。

#include#define fi first

#define se second

#define debug cout<<"i am here"const int maxn=1e5+5,inf=0x3f3f3f3f;

//int mod=1e9+7;

const int eps=1e-3;

int n,m;

int p[3];

int fa[maxn];

bool flag[maxn];

struct edgee[maxn];

bool cmp(edge a,edge b)

int findd(int x)

signed main()

for(int i=1,num,val;i<=m;i++)

scanf("%d",&val);

if(num==1) p[2]=p[1];

e[i]=;

}sort(e+1,e+1+m,cmp);

ll ans=0;

for(int i=1;i<=m;i++)else if(!flag[y])

}else}}

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

return 0;

}

NC218425 魏遲燕的自走棋(貪心 並查集)

第一步貪心,按照權值排序,越大的能用肯定最優 因為在當前情況下,假如可以用這個但不用 最後求取的解,你將他對應的那個換掉,乙個不會更差。排完序後我們再考慮本題。這題巧妙地轉化在於,轉化成圖模型,每個 的兩個端點相當於一條邊,如果k 1就是自環 對於乙個大小為x的集合,他們中的邊要不是x 1,要不是x...

多多自走棋的各個套路簡單分析

多多自走棋隨著新版本的更新又出來了一些新的套路。我們從開發者和玩家二者的角度分析一下當前版本。隨著基拉法師大招的改動,龍法終於變成了乙個可用陣容。之前缺傷害的問題或多或少得以解決 前期電魂和龜老如果能成功放出第二個大招將會對非騎士陣容造成毀滅性擊打 而碰到騎士在遊戲中期也由於有蝙蝠的保命和龍騎的高能...