寫了乙個有點奇怪的做法(感覺
首先發現有個比較正常的暴力,就是每次二分重新建圖跑,似乎有80分,應該也比較好寫,考場應該會寫這個。
考慮如果得到了前\(i\)個人的答案(問題1),那麼這些人只能在一部分的導師裡面反悔,我們把這些邊建出來。
然後對於\(i+1\sim n\)個人,每次把它所有邊加上,然後看看它在這個排名可不可以達到它的期望,然後再把邊撤回。
這裡用乙個單路增廣就好,比較好撤回,可以發現這個單路增廣是\(o(n+m)\)的
然後每個人跑了\(n\)次單路增廣,\(m\)在建一部分邊後大小應該是\(nc\)條的,所以總複雜度是\(o(tn^3c)\),跑不滿就可以過
code:
#include #include #include #include const int n=420;
const int m=4e5;
const int inf=0x3f3f3f3f;
template void read(t &x)
int head[n],thead[n],edge[m],to[m],next[m],cnt;
void add(int u,int v,int w)
int n,m,s,t,bee[n][n],ans0[n],ans1[n],yuy[n];
int pre[n],vis[n],ti,id,flag;
void dfs(int now)
flag=0;
return;
}for(int v,i=head[now];flag&&i;i=next[i])
if(edge[i])
}struct koito_yuu
koito_yuu(int v,int x)
bool friend operator <(koito_yuu a,koito_yuu b)
}yuu[n][n];
void work()
*/} for(int i=1;i<=n;i++) read(yuy[i]);
for(int i=1;i<=n;i++)
flag=1,++ti;
dfs(s);
id=bee[j][id==t+1?m+1:id-n];
if(j==i) ans0[i]=id;
if(id<=yuy[j]) ans1[j]=i;
cnt=tmp;
for(int k=1;k<=t+1;k++) head[k]=thead[k];
} add(s,i,1);
for(int j=1;j<=m+1;j++)
if(ans0[i]==yuu[i][j].v)
add(i,yuu[i][j].x,1);
flag=1,++ti;
dfs(s);
int now=t;
while(pre[now])
}for(int i=1;i<=n;i++) printf("%d ",ans0[i]);
puts("");
for(int i=1;i<=n;i++) printf("%d ",i-ans1[i]);
puts("");
}int main()
return 0;
}
2019.3.19 八省聯考2018 劈配
題目這題目,乍一眼看上去像乙個dp,因為這個資料範圍一般都是dp,但是考慮到轉移有後效性,所以顯然是做不了dp的。考試的時候像著怎麼設狀態沒有後效性,失敗了,就只打了乙個70分的暴力,還掛了20分。這題其實是個 網路流 匹配 真心看不出,然後我寫部落格的時候旁邊yl神犇看見了,嘲諷了我一波,我是真的...
八省聯考2018 劈配
題解 這題思路就是暴力。主要在於分析複雜度?dinic跑二分圖 msqrt n 這題好像用不到。首先這是個匹配問題顯然需要利用網路流 考慮第一問 每一次我們就暴力按照志願順序加入邊 直到二分圖匹配數 1 這個複雜度是 nm nm 的 因為一次只增廣一條邊所以每次是nm的,不過這個很明顯是跑不滿而且差...
八省聯考2018 劈配
一年一度的綜藝節目 中國新 又開始了。zayid 從小就夢想成為一名程式設計師,他覺得這是乙個展示自己的舞台,於是他毫不猶豫地報名了。輕車熟路的zayid 順利地通過了海選,接下來的環節是導師盲選,這一階段的規則是這樣的 總共n 名參賽選手 編號從1 至n 每人寫出乙份 並介紹自己的夢想。接著 由所...