日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

教辅的组成(网络流果题 洛谷P1231)

發(fā)布時(shí)間:2023/11/30 编程问答 45 豆豆
生活随笔 收集整理的這篇文章主要介紹了 教辅的组成(网络流果题 洛谷P1231) 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

題目描述

蒟蒻HansBug在一本語文書里面發(fā)現(xiàn)了一本答案,然而他卻明明記得這書應(yīng)該還包含一份練習(xí)題。然而出現(xiàn)在他眼前的書多得數(shù)不勝數(shù),其中有書,有答案,有練習(xí)冊。已知一個(gè)完整的書冊均應(yīng)該包含且僅包含一本書、一本練習(xí)冊和一份答案,然而現(xiàn)在全都亂做了一團(tuán)。許多書上面的字跡都已經(jīng)模糊了,然而HansBug還是可以大致判斷這是一本書還是練習(xí)冊或答案,并且能夠大致知道一本書和答案以及一本書和練習(xí)冊的對應(yīng)關(guān)系(即僅僅知道某書和某答案、某書和某練習(xí)冊有可能相對應(yīng),除此以外的均不可能對應(yīng))。既然如此,HansBug想知道在這樣的情況下,最多可能同時(shí)組合成多少個(gè)完整的書冊。

輸入輸出格式

輸入格式:

第一行包含三個(gè)正整數(shù)N1、N2、N3,分別表示書的個(gè)數(shù)、練習(xí)冊的個(gè)數(shù)和答案的個(gè)數(shù)。

第二行包含一個(gè)正整數(shù)M1,表示書和練習(xí)冊可能的對應(yīng)關(guān)系個(gè)數(shù)。

接下來M1行每行包含兩個(gè)正整數(shù)x、y,表示第x本書和第y本練習(xí)冊可能對應(yīng)。(1<=x<=N1,1<=y<=N2)

第M1+3行包含一個(gè)正整數(shù)M2,表述書和答案可能的對應(yīng)關(guān)系個(gè)數(shù)。

接下來M2行每行包含兩個(gè)正整數(shù)x、y,表示第x本書和第y本答案可能對應(yīng)。(1<=x<=N1,1<=y<=N3)

輸出格式:

輸出包含一個(gè)正整數(shù),表示最多可能組成完整書冊的數(shù)目。

輸入輸出樣例

輸入樣例#1:
5 3 4 5 4 3 2 2 5 2 5 1 5 3 5 1 3 3 1 2 2 3 3 4 3 輸出樣例#1:
2

說明

樣例說明:

如題,N1=5,N2=3,N3=4,表示書有5本、練習(xí)冊有3本、答案有4本。

M1=5,表示書和練習(xí)冊共有5個(gè)可能的對應(yīng)關(guān)系,分別為:書4和練習(xí)冊3、書2和練習(xí)冊2、書5和練習(xí)冊2、書5和練習(xí)冊1以及書5和練習(xí)冊3。

M2=5,表示數(shù)和答案共有5個(gè)可能的對應(yīng)關(guān)系,分別為:書1和答案3、書3和答案1、書2和答案2、書3和答案3以及書4和答案3。

所以,以上情況的話最多可以同時(shí)配成兩個(gè)書冊,分別為:書2+練習(xí)冊2+答案2、書4+練習(xí)冊3+答案3。

數(shù)據(jù)規(guī)模:

對于數(shù)據(jù)點(diǎn)1, 2, 3,M1,M2<= 20

對于數(shù)據(jù)點(diǎn)4~10,M1,M2 <= 20000

題解:將書本拆點(diǎn),練習(xí)冊連向書本1,書本2連向答案,再建立超級源點(diǎn)和超級匯點(diǎn),跑一邊最大流即可,敲這題是為了打模板的。

#include<algorithm> #include<fstream> #include<cstdio> #include<cstdlib> #include<cmath> #include<cstring> #include<iostream> using namespace std;int n1,n2,n3,m1,m2,x,y,cur;//n1是書,n2是練習(xí)冊,n3是答案,m1書冊,m2書答案 int head[50050],lev[50050],q[50050]; struct tedge {int to,nex,val; }e[200010];void Add(int u,int v,int val) {cur++;e[cur].to = v;e[cur].nex = head[u];e[cur].val = val;head[u] = cur;cur++;e[cur].to = u;e[cur].nex = head[v];e[cur].val = 0;head[v] = cur; }int bfs(int S,int T) {int h=1,t=1;for (int i=0; i<=2*n1+n2+n3+1+1; i++)lev[i] = 0;q[h] = S; lev[S] = 1;while (h<=t){int u=q[h];for (int i=head[u]; i!=-1; i=e[i].nex){int v=e[i].to;if (lev[v]==0&&e[i].val>0){lev[v] = lev[u]+1;t++; q[t]=v;}}h++;}return (max(lev[T],0)); }int dfs(int u,int T,int f) {if (u==T||f==0) return f;int ret=0,d;for (int i=head[u]; i!=-1; i=e[i].nex){int v=e[i].to;if (lev[v]>lev[u]&&e[i].val>0){d=dfs(v,T,min(f,e[i].val));ret+=d;f-=d;e[i].val-=d;if (i%2==0) e[i-1].val+=d;else e[i+1].val+=d;if (f==0) break;}}return ret; }void Dinic() {int maxflow=0;for (;bfs(1,2*n1+n2+n3+1+1);)maxflow+=dfs(1,2*n1+n2+n3+1+1,1e9);printf("%d\n",maxflow); }int main() {freopen("c.in","r",stdin);freopen("c.out","w",stdout);scanf("%d%d%d",&n1,&n2,&n3);for (int i=0; i<=2*n1+n2+n3+1+1; i++)head[i] = -1;scanf("%d",&m1);for (int i=1; i<=m1; i++){int x,y;scanf("%d%d",&x,&y);Add(2*n1+y+1,x+1,1);}scanf("%d",&m2);for (int i=1; i<=m2; i++){int x,y;scanf("%d%d",&x,&y);Add(x+n1+1,2*n1+n2+y+1,1);}for (int i=1; i<=n1; i++)Add(i+1,i+n1+1,1);for (int i=1; i<=n2; i++)Add(1,2*n1+i+1,1);for (int i=1; i<=n3; i++)Add(2*n1+n2+i+1,2*n1+n2+n3+1+1,1);Dinic();return 0; }

?

轉(zhuǎn)載于:https://www.cnblogs.com/Janous/p/7683549.html

總結(jié)

以上是生活随笔為你收集整理的教辅的组成(网络流果题 洛谷P1231)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。