網路流24題 9 試題庫問題

2021-08-19 10:09:19 字數 1299 閱讀 7767

可以發現這道題有點類似二分圖匹配,唯一不同的是每個型別的數量有限制,我們回顧一下用最大流時的做法,設兩邊集合為a,b,s向a連流量為1的邊,a向b連流量為1的邊,b向t連流量為1的邊,這樣保證了每對ab只會產生一的貢獻,那麼我們這裡所有b(表示型別)向t連的邊的流量改為該題目聯絡要求的數量,其他不變,那麼每條s-a-b-t的增廣路表示的就是a這道題選b型別,因為s-a的流量為1,就保證了每個a只能流到乙個b,b-t則表示這個型別的題目我只需要這麼多,那麼最後最大流流完判一下maxflow是不是於要求的題目數量相同,如果相同說明是可以做到的,否則no solution!這個非常顯然,至於輸出方案,每個a看他這個流量流向哪個b,他就屬於哪個型別的題目

#include

#include

#include

#include

#include

#include

#define ll long long

#define inf (2139062143)

#define n (1000001)

using

namespace

std;

int tot,k,n,x,s,t,y,all,sum,ans;

int a[n],fl[n],nxt[n],head[n],h[n],cou[n],cur[n];

vector

q[n];

template

void read(t&t)

do while (isdigit(p));

if (!fl) t=-t;

}inline

void add(int x,int y,int f)

int dfs(int u,int maxflow)

}cur[u]=head[u];

if (--cou[h[u]]==0) h[s]=all;

h[u]++;

cou[h[u]]++;

return used;

}int main()

for (int i=1;i<=n;i++)

}memset(h,0,sizeof(h));

all=n+k+2;

cou[0]=all;

while (h[s]if (ansputs("no solution!");

return

0; }

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

for (int i=1;i<=k;i++)

puts("");

}return

0;}

網路流24題 試題庫問題

網路流24題大多需要spj,所以需要乙個有spj的oj,本系列 均在www.oj.swust.edu.cn測試通過 這道題的模型很顯然,源點向每個試卷連線一條容量為1的邊,每個試卷向對應的型別連線一條容量為一的邊,每個型別向匯點連線一條容量為需要數量的邊,跑一邊最大流即可。include inclu...

網路流24題 試題庫問題

傳送門 這個題好像比較水。每個種類向匯點連容量為所需求的數量的邊 然後每個試題向可以選的種類連容量為1的邊 再從源點向每個試題連容量為1的邊,然後dinic 過程中記錄一下轉移的目標節點,然後輸出路徑就好了 判無解不用我說了吧。include include include include incl...

網路流24題 試題庫問題

有 k k 種型別和 n role presentation n n個題目,每個題目會適應部分型別,一種型別可能需要多種題,一道題可能多種型別都需要,但一道題只能滿足一種型別,現要求出滿足出完所有型別的題目的方案 網路流擅長於解決各種有要求的匹配,顯然這道題是有條件的匹配,可以用最大流來解決。首先建...