八省聯考2018 劈配

2022-05-31 05:42:10 字數 2892 閱讀 2741

題解:

這題思路就是暴力。。 主要在於分析複雜度?

dinic跑二分圖$msqrt(n)$ 這題好像用不到。。

首先這是個匹配問題顯然需要利用網路流

考慮第一問

每一次我們就暴力按照志願順序加入邊

直到二分圖匹配數+1

這個複雜度是$(nm)*nm$的(因為一次只增廣一條邊所以每次是nm的,不過這個很明顯是跑不滿而且差挺多的)

這樣比較gg,我們注意到有用的邊只有c條

大概是$(nm/c)*cn$ 也就是n^2m的(我這個複雜度假設了c相同)

(洛谷上的題解說是$n^2c$的 感覺不太對。。)

考慮第二問

首先肯定要二分答案

然後在殘餘網路上繼續跑(記錄n個殘餘網路)

時間複雜度$nlogn*nc$

總時間複雜度$n^2(clogn+m)$

這題交上去70。。

查錯查的心態**

多組資料就炸單組資料就過

然後以為是沒清空什麼東西。。

後來發現是 還原的時候我的還原順序不對導致還原了上一次的答案

而由於這個還原不還原也是對的,所以單組資料沒炸

***還原的時候要逆序還原

***memset還可以清空自定義型別??

**:

#include using

namespace

std;

#define rint register int

#define il inline

#define rep(i,h,t) for(int i=h;i<=t;i++)

#define dep(i,t,h) for(int i=t;i>=h;i--)

#define ll long long

#define me(x) memset(x,0,sizeof(x))

#define mep(x,y) memcpy(x,y,sizeof(y))

#define mid ((h+t+1)>>1)

namespace

io template

void read(t &x)

char sr[1

<<24],z[20]; int z,c1=-1

; template

void

wer(t x)

il void

wer1()

il void

wer2()

template

il void maxa(t &x,t y)

template

il void mina(t &x,t y)

template

il t max(t x,t y)

template

il t min(t x,t y)

};using

namespace

io;const

int inf=1e9;

const

int n=300

;int

t,c,n,m,a[n],f[n][n],s,t,se[n],ans[n],ans2[n];

vector

ve[n][n];

const

int m=450

;const

int m2=6000

;struct

rejl[m2];

int cnt1=0

; struct

dinic;

head[x]=l;

}il

void arr2(int x,int y,int

z)

bool

bfs()

}if (d[t]==inf) return(0); else

return(1

); }

int dfs(int x,int

y)

if (!y) break

; head[x]=u;

}return

flow;

}void

maxflow()

}}d[202

],now;

il void fz(dinic &a,dinic &b)

il bool check(int x,int

y) now.maxflow();

if (now.flow==d[y].flow+1) return(1

);

else

return(0);}

intmain()

}rep(i,

1,n) read(se[i]);

s=0; t=n+m+1

; d[

0].l=0; me(d[0

].head);

rep(i,

1,n)

d[0].arr2(s,i,1

); rep(i,

1,m)

d[0].arr2(i+n,t,a[i]);

rep(i,

1,n)}}

rep(i,

1,n)

if (!check(i,h)) ans2[i]=i;

else ans2[i]=i-h-1

; }

}rep(i,

1,n) wer(ans[i]),wer1();

wer2();

rep(i,

1,n) wer(ans2[i]),wer1();

wer2();

}fwrite(sr,

1,c1+1

,stdout);

return0;

}

八省聯考2018 劈配

題目這題目,乍一眼看上去像乙個dp,因為這個資料範圍一般都是dp,但是考慮到轉移有後效性,所以顯然是做不了dp的。考試的時候像著怎麼設狀態沒有後效性,失敗了,就只打了乙個70分的暴力,還掛了20分。這題其實是個 網路流 匹配 真心看不出,然後我寫部落格的時候旁邊yl神犇看見了,嘲諷了我一波,我是真的...

八省聯考2018 劈配

一年一度的綜藝節目 中國新 又開始了。zayid 從小就夢想成為一名程式設計師,他覺得這是乙個展示自己的舞台,於是他毫不猶豫地報名了。輕車熟路的zayid 順利地通過了海選,接下來的環節是導師盲選,這一階段的規則是這樣的 總共n 名參賽選手 編號從1 至n 每人寫出乙份 並介紹自己的夢想。接著 由所...

八省聯考2018 劈配(最大流)

從源到每乙個人連一條容量為 1 的邊。從每乙個導師到匯連一條容量為導師戰隊人數的邊。第一問我們依次列舉每乙個學員,然後再依次與第 1 至 m 志願的老師連邊,如果與第 i 志願的導師連邊跑最大流使得最大流改變,說明找到了乙個導師與自己對應。自己的最小的能實現的志願就是 i 如果找不到志願i的導師要把...