[網路流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...