網路流24題 搭配飛行員 飛行員配對方案

2021-07-10 01:13:13 字數 2480 閱讀 3912

[網路流24題] 搭配飛行員

★★☆ 輸入檔案:flyer.in 輸出檔案:flyer.out 簡單對比

時間限制:1 s 記憶體限制:128 mb

【問題描述】

飛行大隊有若干個來自各地的駕駛員,專門駕駛一種型號的飛機,這種飛機每架有兩個駕駛員,需乙個正駕駛員和乙個副駕駛員。由於種種原因,例如相互配合的問題,有些駕駛員不能在同一架飛機上飛行,問如何搭配駕駛員才能使出航的飛機最多。

如圖,假設有10個駕駛員,如圖中的v1,v2,…,v10就代表達10個駕駛員,其中v1,v2,v3,v4,v5是正駕駛員,v6,v7,v8,v9,v10是副駕駛員。如果乙個正駕駛員和乙個副駕駛員可以同機飛行,就在代表他們兩個之間連一條線,兩個人不能同機飛行,就不連。例如v1和v7可以同機飛行,而v1和v8就不行。請搭配飛行員,使出航的飛機最多。注意:因為駕駛工作分工嚴格,兩個正駕駛員或兩個副駕駛員都不能同機飛行.

【輸入格式】

輸入檔案有若干行

第一行,兩個整數n與n1,表示共有n個飛行員(2<=n<=100),其中有n1名飛行員是正駕駛員.

下面有若干行,每行有2個數字a,b。表示正駕駛員a和副駕駛員b可以同機飛行。

注:正駕駛員的編號在前,即正駕駛員的編號小於副駕駛員的編號.

【輸出格式】

輸出檔案有一行

第一行,1個整數,表示最大起飛的飛機數。

【輸入輸出樣例】

輸入檔名: flyer.in

10 5

1 7

2 6

2 10

3 7

4 8

5 9

輸出檔名:flyer.out

4 配對的飛行員之間連邊,如果要用最大流,把源點0與正駕駛員連邊,把匯點n+1與副駕駛員連邊,流量都為1,如果要用二分圖匹配,直接連邊完跑一遍匈牙利演算法就行了。。

注意點:while ((x=read(),y=read())!=eof)不知道為什麼會死迴圈。。

網路流dinic:

#include

#include

#include

#include

using namespace std;

intm,n,i,x,y,ans,sum,cnt=1,h[100001]=,head,tail,q[100001],dis[100001];

struct node

;node edge[100001];

intread()

while (ch>='0' && ch<='9')

return w*c;

}void add(int u,int v,int w)

bool bfs()

p=edge[p].next;}}

if (dis[n+1]>0)

return true;

else

return false;

}int dfs(int

x,int f)

i=edge[i].next;

}if (!used)

dis[x]=-1;

return used;

}int main()

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

while ((scanf("%d

%d",&x,&y))!=eof)

ans=0;

while (bfs())

while (sum=dfs(0,0x7fffffff))

ans+=sum;

printf("%d",ans);

fclose(stdin);

fclose(stdout);

return

0;}

二分圖匹配:

#include

#include

using

namespace

std;

int cnt=1,head[100001]=,part[100001]=,n,m,i,x,y,ans;

struct node

;node edge[100001]=;

bool used[100001];

int read()

while (ch>='0' && ch<='9')

return w*c;

}void add(int u,int v)

bool find(int s)

}return

false;

}int main()

ans=0;

for (i=1;i<=m;i++)

printf("%d",ans);

fclose(stdin);

fclose(stdout);

return

0;}

網路流24題 搭配飛行員

題目 洛谷p2756 tips 兩處的輸出格式不同,提交時注意輸出格式233 解法題目其實是一道二分圖匹配 匈牙利水過 考慮網路流建模。建立兩點超源 s s 超匯t role presentation style position relative t t,對於搭配,若 u u 與v role pr...

網路流24題 搭配飛行員

飛行大隊有若干個來自各地的駕駛員,專門駕駛一種型號的飛機,這種飛機每架有兩個駕駛員,需乙個正駕駛員和乙個副駕駛員。由於種種原因,例如相互配合的問題,有些駕駛員不能在同一架飛機上飛行,問如何搭配駕駛員才能使出航的飛機最多。因為駕駛工作分工嚴格,兩個正駕駛員或兩個副駕駛員都不能同機飛行。input 第一...

網路流24題 搭配飛行員

輸入檔案 flyer.in輸出檔案 flyer.out簡單對比 時間限制 1 s 記憶體限制 128 mb 問題描述 飛行大隊有若干個來自各地的駕駛員,專門駕駛一種型號的飛機,這種飛機每架有兩個駕駛員,需乙個正駕駛員和乙個副駕駛員。由於種種原因,例如相互配合的問題,有些駕駛員不能在同一架飛機上飛行,...