原題鏈結
抱歉有點事要忙只能引用了……
這道題正解是用二分圖,但是做完這道題的第二題才講……所以我採用的我當時會的做法:並查集。
我們每有乙個**(a, b)時我們可以把它當做一條邊(a, b)。(注釋我寫的)然後對於構圖之後,乙個大小為k聯通塊,我們發現有如下性質:
——如果這個聯通塊沒有環(樹):因為有k-1條邊,那麼總有方法使其中的k-1個節點被覆蓋。容易知道這個聯通塊中一定不選最大的點。
——如果這個聯通塊有環:那麼這k個節點一定都可以被覆蓋
這時我們可以用並查集去維護聯通塊有沒有環,聯通塊的大小。
然後我們掃一遍就行了……看看該聯通塊有沒有環,如果沒有環的話是不是看它是不是這個聯通塊的最大乙個點。
引自
#includeusing namespace std;
const int maxn=1000000+3;//注意開n的範圍而不是開數的範圍
//因為攻擊n次所以數最大只能用到n,後面比n大的都不用管
int fa[maxn],size[maxn];
bool cir[maxn];
int find(int x)
int main()
} int ans;
for(int i=1;i<=n+1;i++)
else size[fai]--;
}} cout《幸甚至哉,歌以詠志。
SCOI2010 連續攻擊遊戲
題目 description lxhgww最近迷上了一款遊戲,在遊戲裡,他擁有很多的裝備,每種裝備都有2個屬性,這些屬性的值用 1,10000 之間的數表示。當他使用某種裝備時,他只能使用該裝備的某乙個屬性。並且每種裝備最多只能使用一次。遊戲進行到最後,lxhgww遇到了終極boss,這個終極bos...
SCOI2010 連續攻擊遊戲
這道題是乙個二分圖匹配問題。如果第 i 件裝備的屬性值為 j 將裝備 i 連邊到屬性值 j 注意裝備結點 屬性值結點 然後從 1 到 10000 跑二分圖匹配,判斷該點是否能被匹配。直到不能匹配為止。1 include 2 3using namespace std 45 define re regi...
SCOI2010 連續攻擊遊戲
lxhgww最近迷上了一款遊戲,在遊戲裡,他擁有很多的裝備,每種裝備都有2個屬性,這些屬性的值用 1,10000 之間的數表示。當他使用某種裝備時,他只能使用該裝備的某乙個屬性。並且每種裝備最多只能使用一次。遊戲進行到最後,lxhgww遇到了終極boss,這個終極boss很奇怪,攻擊他的裝備所使用的...