(
題目描述
«問題描述:
每條邊的容量均為1。求網路g1的( 0 x , 0 y )最大流。
«程式設計任務:
對於給定的給定有向無環圖g,程式設計找出g的乙個最小路徑覆蓋。
輸入輸出格式
輸入格式:
件第1 行有2個正整數n和m。n是給定有向無環圖g 的頂點數,m是g 的邊數。接下來的m行,每行有2 個正整數i和j,表示一條有向邊(i,j)。
輸出格式:
從第1 行開始,每行輸出一條路徑。檔案的最後一行是最少路徑數。
輸入輸出樣例
輸入樣例#1: 複製
11 12
1 2
1 3
1 4
2 5
3 6
4 7
5 8
6 9
7 10
8 11
9 11
10 11
輸出樣例#1: 複製
1 4 7 10 11
2 5 8
3 6 9 3說明
1<=n<=150,1<=m<=6000
由@zhouyonglong提供spj
首先建圖 然後從源點向每個節點的入點都連權值為1的邊 從每個點的出點都向匯點連權值為1的邊 然後如果這兩點之間原來有邊那麼從起點的出點向終點的入點連1的邊 跑dinic完成最大匹配 那麼最後答案就是節點數-最大匹配數
我們考慮假如這兩個點可以匹配 那我是不是可以用一條路徑給覆蓋 初始我每個節點都需要路徑來覆蓋 現在有乙個匹配我就可以減少1 於是答案就是這樣
關於輸出路徑來說我應該尋找每個點 然後看他反向邊的殘餘流量如果是0 那麼那個點就在我的路徑上 可以畫圖感受一下 我比較傻給不出特別嚴謹的證明qwq
#include
#include
#include
#include
using
namespace
std;
#define inf 0x3f3f3f3f
#define n 400
inline
char gc()
return *s++;
}inline
int read()
return x;
}struct nodedata[15000];
int num=1,h[n],t,level[n],n,m;
bool visit[n];
inline
void insert1(int x,int y,int z)
inline
bool bfs()
}return0;}
inline
int dfs(int x,int s)
}return ss-s;
}int main()int ans=0;
while(bfs()) ans+=dfs(0,inf);
for (int i=1;i<=n;++i)
}while(flag);puts("");
}printf("%d",n-ans);
return
0;}
loj6004 網路流 24 題 圓桌聚餐
題目描述 假設有來自 n n n 個不同單位的代表參加一次國際會議。每個單位的代表數分別為 ri r i r i 會議餐廳共有 m m m 張餐桌,每張餐桌可容納 ci c i c i 個代表就餐。為了使代表們充分交流,希望從同乙個單位來的代表不在同乙個餐桌就餐。試設計乙個演算法,給出滿足要求的代表...
LOJ 6004 網路流 24 題 圓桌聚餐
題意 假設有來自 m mm 個不同單位的代表參加一次國際會議。每個單位的代表數分別為 r ir i ri 會議餐廳共有 n nn 張餐桌,每張餐桌可容納 c ic i ci 個代表就餐。為了使代表們充分交流,希望從同乙個單位來的代表不在同乙個餐桌就餐。試設計乙個演算法,給出滿足要求的代表就餐方案。連...
loj6013 網路流 24 題 負載平衡
題目描述 g 公司有 n n n 個沿鐵路運輸線環形排列的倉庫,每個倉庫儲存的貨物數量不等。如何用最少搬運量可以使 n n n 個倉庫的庫存數量相同。搬運貨物時,只能在相鄰的倉庫之間搬運。輸入格式 檔案的第 1 1 1 行中有 1 1 1 個正整數 n n n,表示有 n n n 個倉庫。第 2 2...