題解:
這題思路就是暴力。。 主要在於分析複雜度?
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 usingnamespace
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的導師要把...