網路流 最大流 路徑輸出

2022-09-23 20:18:13 字數 1717 閱讀 4212

[網路流24題] 圓桌聚餐

★★☆ 輸入檔案:roundtable.in 輸出檔案:roundtable.out 評測外掛程式

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

?問題描述:

假設有來自m 個不同單位的代表參加一次國際會議。每個單位的代表數分別為

ri(i=1,2,3…m), 。會議餐廳共有n張餐桌,每張餐桌可容納c i(i=1,2…n) 個代表就餐。

為了使代表們充分交流,希望從同乙個單位來的代表不在同乙個餐桌就餐。試設計乙個演算法,

給出滿足要求的代表就餐方案。

?程式設計任務:

對於給定的代表數和餐桌數以及餐桌容量,程式設計計算滿足要求的代表就餐方案。

?資料輸入:

由檔案roundtable.in提供輸入資料。檔案第1行有2 個正整數m和n,m表示單位數,n表

示餐桌數,1<=m<=150, 1<=n<=270。檔案第2 行有m個正整數,分別表示每個單位的代表

數。檔案第3 行有n個正整數,分別表示每個餐桌的容量。

?結果輸出:

程式執行結束時,將代表就餐方案輸出到檔案roundtable.out中。如果問題有解,在檔案第

1 行輸出1,否則輸出0。接下來的m行給出每個單位代表的就餐桌號。如果有多個滿足要

求的方案,只要輸出1 個方案。

輸入檔案示例 輸出檔案示例

roundtable.in

4 54 5 3 5

3 5 2 6 4 roundtable.out

11 2 4 5

1 2 3 4 5

2 4 5

1 2 3 4 5

跑一邊最大流,然後驗證是否滿流

#include

#define maxn 510

#define maxm 100000

#define inf 0x3f3f3f3f

using namespace std;

struct edge

;edge edge[maxm];

int head[maxn], cur[maxn], edgenum;

int dist[maxn];

bool vis[maxn];

int n, m,ss,tt;

void init()

void addedge(int u, int v, int w)

; edge[edgenum] = e1;

head[u] = edgenum++;

edge e2 = ;

edge[edgenum] = e2;

head[v] = edgenum++;

}bool bfs(int s, int t)}}

return false;

}int dfs(int x, int a, int t)

}return flow;

}int maxflow(int s, int t)

return flow;

}int t;

int n,m,t;

int main()

int sum = 0;

int ss,tt;

scanf("%d%d", &m, &n);

ss=0,tt=m+n+1;

init();

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

}for(int j=m+1;j<=n+m;j++)

if(maxflow(ss, tt)

網路流 最大流

網路流 題記 網路流是最近講過的最迷演算法 網路流 network flows 是一種模擬水流的解決問題方法,與線性規劃密切相關。非常重視選手在網路流上的建模技巧,畫圖是非常關鍵的。1 最大流 問題引入 有n條溝渠,與水坑s t相連,匯聚成m個點,第i條溝渠的水流的流量為c i 每乙個點的流入量和流...

網路流(最大流)

我們圍繞一道題來講解吧 藍橋杯 演算法訓練 網路流裸題 首先,何為網路流最大流問題?可行流 對於每條路線 u,v 上給定乙個實數f u,v 滿足 0 f u,v c u,v 則稱f u,v 為路線 u,v 的流量。而對於一組具有源點和匯點,且總流出量 總流入量,則稱為網路中的一條可行流。拿例子來說 ...

網路流 最大流

dinic 最大流 head x 從0開始記 這樣便於找反向邊 異或即可 當前弧優化 include include include include include include include define ll long long define ull unsigned long long d...