bzoj
洛谷在遙遠的東方,有乙個神秘的民族,自稱y族。他們世代居住在水面上,奉龍王為神。每逢重大慶典, y族都
會在水面上舉辦盛大的祭祀活動。我們可以把y族居住地水系看成乙個由岔口和河道組成的網路。每條河道連線著
兩個岔口,並且水在河道內按照乙個固定的方向流動。顯然,水系中不會有環流(下圖描述乙個環流的例子)。
由於人數眾多的原因,y族的祭祀活動會在多個岔口上同時舉行。出於對龍王的尊重,這些祭祀地點的選擇必
須非常慎重。準確地說,y族人認為,如果水流可以從乙個祭祀點流到另外乙個祭祀點,那麼祭祀就會失去它神聖
的意義。族長希望在保持祭祀神聖性的基礎上,選擇盡可能多的祭祀的地點。
第一行包含兩個用空格隔開的整數n、m,分別表示岔口和河道的數目,岔口從1到n編號。
接下來m行,每行包含兩個用空格隔開的整數u、v,
描述一條連線岔口u和岔口v的河道,水流方向為自u向v。
n≤100m≤1000
第一行包含乙個整數k,表示最多能選取的祭祀點的個數。
4 4
1 2
3 4
3 2
4 22
【樣例說明】
在樣例給出的水系中,不存在一種方法能夠選擇三個或者三個以上的祭祀點。包含兩個祭祀點的測試點的方案有兩種:
選擇岔口1與岔口3(如樣例輸出第二行),選擇岔口1與岔口4。
水流可以從任意岔口流至岔口2。如果在岔口2建立祭祀點,那麼任意其他岔口都不能建立祭祀點
但是在最優的一種祭祀點的選取方案中我們可以建立兩個祭祀點,所以岔口2不能建立祭祀點。對於其他岔口
至少存在乙個最優方案選擇該岔口為祭祀點,所以輸出為1011。
最長反鏈覆蓋
看到這道題目的第一眼的思路
就覺得很類似於最小路徑覆蓋
但是我們發現這樣是錯的,
因為無法確定路徑的聯通關係
現在稍微改一下就行了,既然只要是聯通的就不能選了
那麼就把有邊直接相連,改為是否聯通
提前跑flo
yd處理一下再連邊就行了
(二分圖匹配也是可以的)
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
using
namespace
std;
#define ll long long
#define rg register
#define max 555
#define inf 1000000000
inline
int read()
struct linee[max*max*4];
int h[max],cnt=2;
inline
void add(int u,int v,int w)
;h[u]=cnt++;
e[cnt]=(line);h[v]=cnt++;
}int level[max],s,t;
bool bfs()
return level[t];
}int dfs(int u,int flow)
}if(!ret)level[u]=0;
return ret;
}int dinic()
int n,m,g[max][max];
int main()
BZOJ 1066 蜥蜴 網路流
很普通的拆點網路流,把每個柱子拆成兩個點 i,j,0 和 i,j,1 對於柱子的高度限制則加邊 i,j,0 i,j,1 height 兩個柱子能互相到達則加邊 i,j,1 i1,j1,0 inf 能到達邊界的柱子加邊 i,j,1 t,inf 有蜥蜴的柱子加邊 s,i,j,0 1 跑一遍最大流,答案就...
bzoj1834(網路流 費用流)
給定一張有向圖,每條邊都有乙個容量c和乙個擴容費用w。這裡擴容費用是指將容量擴大1所需的費用。求 1 在不擴容的情況下,1到n的最大流 2 將1到n的最大流增加k所需的最小擴容費用。第一問裸的網路流 第二問 新建乙個匯點,將n號點與匯點相連,容量為k,限制最多增大的流量 費用為0 將原先每一條邊都新...
bzoj1458 士兵占領 網路流
有乙個m n的棋盤,有的格仔是障礙。現在你要選擇一些格仔來放置一些士兵,乙個格仔裡最多可以放置乙個士兵,障礙格里不能放置士兵。我們稱這些士兵占領了整個棋盤當滿足第i行至少放置了li個士兵,第j列至少放置了cj個士兵。現在你的任務是要求使用最少個數的士兵來占領整個棋盤。第一行兩個數m,n,k分別表示棋...