1. 程式人生 > >BZOJ 1854 SCOI2010 遊戲 二分圖最大匹配/並查集

BZOJ 1854 SCOI2010 遊戲 二分圖最大匹配/並查集

題目大意:給定n個武器,每個武器有兩個屬性,只能使用其中一個,要求選擇一些武器 可以造成形如1 2 3 4的傷害 求最大傷害

題目大意我沒寫明白還是去看原題把QAQ

做法1:

同 1191 每個武器向兩個屬性連邊 然後從1~10000列舉屬性 跑二分圖最大匹配 無法匹配則輸出答案

#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
#define M 1001001
using namespace std;
struct abcd{
    int to,next;
}table[M<<1];
int head[M],tot;
int n,m;
int result[M],state[M],T;
void Add(int x,int y)
{
    table[++tot].to=y;
    table[tot].next=head[x];
    head[x]=tot;
}
bool Hungary(int x)
{
    int i;
    for(i=head[x];i;i=table[i].next)
    {
        if(state[table[i].to]==T)
            continue;
        state[table[i].to]=T;
        if( !result[table[i].to] || Hungary(result[table[i].to]) )
        {
            result[table[i].to]=x;
            return true;
        }
    }
    return false;
}
int main()
{
    int i,x,y;
    cin>>m;
    for(i=1;i<=m;i++)
    {
        scanf("%d%d",&x,&y);
        Add(x,i);Add(y,i);   
    }
    for(i=1;i<=10000;i++)
    {
        ++T;
        if( !Hungary(i) )
            break;
    }
    cout<<i-1<<endl;
}

做法2:

引用一下HZWER的題解:

將每個武器變成一條邊 連線兩個屬性

如果一個聯通塊形成了一棵n個點的樹 那麼只能滿足其中的n-1個的點

如果一個聯通塊有一個環 那麼就能滿足所有的點

於是我們用並查集維護圖的連通性,對於每個集合記錄這個聯通塊有沒有環,以及這個聯通塊中最大的點是多少

一旦某個點所在並查集中無環且最大的點是自己那麼就可以輸出答案了

#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
#define M 10100
using namespace std;
int n=10000,m;
int fa[M],v[M],max_num[M];
int Find(int x)
{
    if(!fa[x])
        fa[x]=x,max_num[x]=x;
    if(fa[x]==x)
        return x;
    return fa[x]=Find(fa[x]);
}
int main()
{
    int i,x,y;
    cin>>m;
    for(i=1;i<=m;i++)
    {
        scanf("%d%d",&x,&y);
        x=Find(x);y=Find(y);
        if(x==y) 
            v[x]=1;
        else
        {
            fa[x]=y;
            v[y]|=v[x];
            max_num[y]=max(max_num[x],max_num[y]);
        }
    }
    for(i=1;i<=n;i++)
    {
        int temp=Find(i);
        if(v[temp]) continue;
        if(max_num[temp]==i) break;
    }
    cout<<i-1<<endl;
}


相關推薦

BZOJ 1854 SCOI2010 遊戲 二分匹配/

題目大意:給定n個武器,每個武器有兩個屬性,只能使用其中一個,要求選擇一些武器 可以造成形如1 2 3 4的傷害 求最大傷害 題目大意我沒寫明白還是去看原題把QAQ 做法1: 同 1191 每個武器向兩個屬性連邊 然後從1~10000列舉屬性 跑二分圖最大匹配 無法匹配則輸

3081 Marriage Match II 二分+流+

題目連結 題意:n個女孩和n個男孩,每個女孩可以和沒有吵架過的或者是沒有和女孩的朋友吵架過的男孩配對,每輪遊戲女孩配對的男孩不能重複,求最多能進行幾輪遊戲。 思路:匹配問題,對於單輪遊戲來說就是求最大匹配了,但是對於多輪遊戲,每個女孩可以匹配多個男孩,又確定了答案的上下界

bzoj 1854: [Scoi2010]遊戲(二分匹配)

1854: [Scoi2010]遊戲 Time Limit: 5 Sec  Memory Limit: 162 MBSubmit: 3695  Solved: 1405 [Submit][Status][Discuss] Description lxhgww最近迷上了

BZOJ 1854 SCOI 2010 遊戲 二分匹配

題目大意:現在要打一個BOSS,一個人有n個武器,一個武器有兩個屬性值,但是一個武器只能攻擊一次。這個BOSS需要從1連續遞增輸出,問輸出的最大值為多少。 思路:以前好像做過一個相似的問題,也是這麼做的,哪個忘了。。 很明顯的二分關係是攻擊力和武器,因為一個攻擊力需要攻擊

BZOJ 1854: [Scoi2010]遊戲 二分匹配

lxhgww最近迷上了一款遊戲,在遊戲裡,他擁有很多的裝備,每種裝備都有2個屬性,這些屬性的值用[1,10000]之間的數表示。當他使用某種裝備時,他只能使用該裝備的某一個屬性。並且每種裝備最多隻能使用一次。 遊戲進行到最後,lxhgww遇到了終極boss,這個終極boss很奇怪,攻擊他的裝備所使用的屬性值

HDU 1281 - 棋盤遊戲 - [二分匹配]

鏈接 ems 枚舉 一個 輸入 string ima () have 題目鏈接:http://acm.split.hdu.edu.cn/showproblem.php?pid=1281 Time Limit: 2000/1000 MS (Java/Others) Memor

HDU1281 棋盤遊戲 —— 二分匹配 + 枚舉

mage 技術 bottom sub .html 攻擊 ava string ostream 題目鏈接:https://vjudge.net/problem/HDU-1281 棋盤遊戲 Time Limit: 2000/1000 MS (Java/Others)

BZOJ 4950 [Wf 2017] 二分匹配 解題報告

Description 那是春日裡一個天氣晴朗的好日子,你準備去見見你的老朋友Patrick,也是你之前的犯罪同夥。Patrick在程式設計競賽上豪賭輸掉了一大筆錢,所以他需要再幹一票。為此他需要你的幫助,雖然你已經金盆洗手了。你剛開始很不情願,因為你一點也不

bzoj 1059: [ZJOI2007]矩陣遊戲 [二分][二分匹配]

sam auto round 包含 bool edge port void 最大 Description   小Q是一個非常聰明的孩子,除了國際象棋,他還很喜歡玩一個電腦益智遊戲——矩陣遊戲。矩陣遊戲在一個N *N黑白方陣進行(如同國際象棋一

[bzoj1854][Scoi2010]遊戲/二分匹配

#include<cstdio> #include<algorithm> #include<cmath> #include<cstdlib> #i

SCOI2010】【二分匹配遊戲

這道題很明顯的二分圖模型,但是建圖是關鍵。 將一件武器的兩個屬性看作二分圖左邊的點,然後把這兩個點與要攻擊的點連兩條邊。 這樣原問題就轉化為了在一個二分圖上從小到大地找增廣路,一旦未找到增廣路,那此時

Bzoj 4950 (二分匹配)

void ide 機會 出現 geo front 老朋友 放置 scrip Description 那是春日裏一個天氣晴朗的好日子,你準備去見見你的老朋友Patrick,也是你之前的犯罪同夥。Patrick在編程競賽 上豪賭輸掉了一大筆錢,所以他需要再幹一票。為此他需要你

BZOJ-4950: [Wf2017]Mission Improbable (二分匹配)

尺寸 inpu ron nbsp load stat esc set 所在 4950: [Wf2017]Mission Improbable Time Limit: 1 Sec Memory Limit: 1024 MBSubmit: 195 Solved: 90[S

bzoj-1191(二分匹配)

max () int visit div define true esp cout 解題思路:比較裸的一道題,直接跑匈牙利就行了,但是要註意一點,這個兔崽子是在闖關,一道題回答不出來就沒了,直接在題目循環那裏加一個else break;就行了!!!; #include&l

【BZOJ1059】矩陣遊戲二分匹配

set 交換 tdi namespace 顏色 pac 連線 include amp 題意:矩陣遊戲在一個N*N黑白方陣進行。每次可以對該矩陣進行兩種操作: 行交換操作:選擇矩陣的任意兩行,交換這兩行(即交換對應格子的顏色) 列交換操作:選擇矩陣的任意行列,交換這兩列(即交

[BZOJ]4950 二分 + 匹配

那是春日裡一個天氣晴朗的好日子,你準備去見見你的老朋友Patrick,也是你之前的犯罪同夥。Patrick在程式設計競賽上豪賭輸掉了一大筆錢,所以他需要再幹一票。為此他需要你的幫助,雖然你已經金盆洗手了。你剛開始很不情願,因為你一點也不想再回到那條老路上了,但是你覺得聽一下他的計劃也無傷大雅。在附近的一個倉庫

[BZOJ]3140 二分匹配

3140: [Hnoi2013]消毒 Time Limit: 10 Sec  Memory Limit: 128 MB Submit: 1339  Solved: 588 [Submit][Status][Discuss] Description 最近在生物實驗室工作

[二分匹配必配點] BZOJ 3546 [ONTAK2010]Life of the Party

#include<cstdio>     #include<cstdlib>     #include<algorithm>     #include<cstring>     #define cl(x) memset(x,0,sizeof(x))     #d

[POJ2446] Chessboard(二分匹配-匈牙利算法)

con clas sed img find span ble names printf 傳送門 把所有非障礙的相鄰格子彼此連一條邊,然後求二分圖最大匹配,看 tot * 2 + k 是否等於 n * m 即可。 但是連邊不能重復,比如 a 格子 和 b 格子 相鄰

POJ1469 COURSES 【二分匹配&#183;HK算法】

pri number break integer iss pre win rop find COURSES Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 17777 Acce