BZOJ 1306 match迴圈賽(搜尋)

2021-09-07 23:11:56 字數 2203 閱讀 3886

題意:

思路:列舉每個人與其後面所有人的比賽的輸贏。若這個人的得分還沒夠,則返回。然後,接著列舉下乙個人與其後面的所有人比賽的輸贏。由於dfs的每層對應的是同乙個人,我們記錄下剩餘人的得分狀態,若已經搜過,則直接返回。這裡採用最小表示,即將剩餘人的得分排個序,計算乙個雜湊值。

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#define abs(x) ((x)>=0?(x):-(x))

#define i64 long long

#define u32 unsigned int

#define u64 unsigned long long

#define clr(x,y) memset(x,y,sizeof(x))

#define clr(x) x.clear()

#define ph(x) push(x)

#define pb(x) push_back(x)

#define len(x) x.length()

#define sz(x) x.size()

#define pi acos(-1.0)

#define sqr(x) ((x)*(x))

#define for0(i,x) for(i=0;i

#define for1(i,x) for(i=1;i<=x;i++)

#define for(i,a,b) for(i=a;i<=b;i++)

#define forl0(i,a) for(i=a;i>=0;i--)

#define forl1(i,a) for(i=a;i>=1;i--)

#define forl(i,a,b)for(i=a;i>=b;i--)

#define rush() int c; for(scanf("%d",&c);c--;)

#define rush(n)  while(scanf("%d",&n)!=-1)

using namespace std;

void rd(int &x)

void rd(i64 &x)

void rd(u32 &x)

void rd(double &x)

void rd(int &x,int &y)

void rd(u32 &x,u32 &y)

void rd(double &x,double &y)

void rd(int &x,int &y,int &z)

void rd(u32 &x,u32 &y,u32 &z)

void rd(double &x,double &y,double &z)

void rd(char &x)

void rd(char *s)

void rd(string &s)

void pr(int x)

void pr(i64 x)

void pr(u32 x)

void pr(double x)

void pr(char x)

void pr(char *x)

void pr(string x)

int find(u64 st)

return -1;

}void insert(u64 st,int step)

};node p[8];

int ans,a[8];

int n;

u64 gethash(int a,int l,int r)

void dfs(int dep,int dep1)

int b[8],i;

if(dep1==n)

i=ans;

dfs(dep+1,dep+2);

p[dep].insert(gethash(b,dep+1,n-1),ans-i);

return;

}if(a[dep]>=3)

if(a[dep]>=1&&a[dep1]>=1)

if(a[dep1]>=3)

}int main()

BZOJ3438 小M的作物

bzoj3438 小m的作物 小m在mc裡開闢了兩塊巨大的耕地a和b 你可以認為容量是無窮 現在,小p有n中作物的種子,每種作物的種子有1個 就是可以種一棵作物 用1.n編號 現在,第i種作物種植在a中種植可以獲得ai的收益,在b中種植可以獲得bi的收益,而且,現在還有這麼一種神奇的現象,就是某些作...

bzoj3438 小M的作物

題目鏈結 先考慮沒有額外收益的時候怎麼做。從 s 向第 i 點連一條容量為 a i 邊,表示種在 a 中的收益。從第 i 個點向 t 連一條容量為 b i 的邊,表示種在 b 中的收益。然後求出來最小割,用總收益減去即可。完成之後如下圖 然後考慮如何處理額外收益 對於每乙個額外的收益,我們先新建乙個...

bzoj3438 小M的作物

這題是一道最大權閉合圖的經典難題 by rose max upd 不誤人子弟了,這就是乙個裸的最小割啊。然後構圖的方式就是把作物值分成ab集合,乙個在st一邊,乙個在ed一邊,st連作物流量為a i 作物流ed流量為b i 對於每乙個組合,新建兩個點,乙個被st流流量為c1,乙個流ed流量為c2,然...