HDU 5727 Necklace(二分匹配)

2021-07-15 10:48:57 字數 1447 閱讀 8724

傳送門:

題意:n個陽點和n個陰點,要拼成乙個項鍊,而且陽和陰必須相鄰,每個陽的兩邊都是陰, 每個陰的兩邊都是陽。然後給你m條邊,每條邊包括乙個編號為a的陽點,和編號為b的陰點,表示這兩個如果相鄰的話,這個陽點就會變得憂鬱。問你最少幾個陽點會變憂鬱。

思路:最少幾個會變的憂鬱,那麼就是n-最大幾個正常的陽點。因為n<=9,所以我們可以考慮列舉陰點的全排列,而且因為是環狀,所以我們固定乙個點,只要o(8!)就可以列舉陰點的全排列。然後對於陰的每一種排列,我們都可以求出哪些位置可以放哪些陽點。處理出來以後,我們只要對每種排列求乙個空位和陽點的最大匹配,就可以求得答案了。

#include 

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

using

namespace

std;

typedef

long

long ll;

typedef pair pii;

#define pb push_back

#define mp make_pair

#define lson l,m,rt<<1

#define rson m+1,r,rt<<1|1

#define calm (l+r)>>1

const

int inf = 2139062143;

int n,m;

bool g[11][11];//yin yang

int yin[11];

bool vis[31];

struct ee

ee(int t,int n):to(t),next(n){}

}edge[500];

int ecnt,head[31];

inline

void add(int a,int b)

void build()

}for(int j=1;j<=n;j++)}}

}int link[31];

bool dfs(int s)}}

return

false;

}int match()

return ans;

}int main()

if(n==0||m==0)

for(int i=0;i1;

}int ans=0;

dowhile(ans!=n&&next_permutation(yin+1,yin+n));

printf("%d\n",n-ans);

}return

0;}

hdu5727 Necklace 列舉 匈牙利

題意 有2n 0 n 9 個珠子,分成陰陽兩極,每極各n個。用這2n個珠子做成乙個項鍊,使得相鄰兩個珠子的極性是不一樣的,因為有一些陽性的珠子會被一些陰性的珠子所削弱在它們它們相鄰的情況下。給你m 0 m n n 1 2 個關係 x,y 表示陽性珠子x會被陰性珠子y在相鄰情況下所削弱。問你最少有多少...

Hdu 3874 Necklace 樹狀陣列

題意 詢問某一區間的值之和,相同元素只算一次 思路,樹狀陣列求解,由於區間相同元素只算一次,採用離線演算法,把區間右端點從小到大排序,按順序處理。首先我們找到乙個點時,記錄它的下標,若在後面還有與它相同的元素,我們把之前的元素去掉,插入到當前位置,每次進行這樣的一次處理,就要判斷一下,處理後該點有沒...

HDU 3474 Necklace 單調佇列

一串項鍊由c和j組成,可以從某乙個位置切斷,從左或者往右收集,問有多少種合法的切割方案,滿足任意時刻c的數量不小於j的數量。單調佇列維護最小值。include include include include using namespace std const int maxn 2000010 cha...