藥水(網路流)

2021-09-24 08:58:29 字數 1370 閱讀 9861

題目描述

冬之國有n個勇士,他們要屠m條龍,每個勇士只能夠屠一條龍。

每個勇士的技能屬性不同,因此他們能夠屠的龍也不同,第i個勇士可以屠編號在集合si內的龍。

作為冬之國最惡毒的女巫小m,她有k瓶藥水,每一瓶藥水可以使得乙個勇士在屠完一條龍之後不會疲倦,當然藥水藥效有限,只能夠支援勇士們再多屠一條龍。同時小m配的藥水有一定的***,因此每個勇士最多只能喝一瓶藥水。

現在小m想要知道,在她的幫助下,勇士們最多能屠多少條龍。

輸入

第一行三個正整數n,m,k。

接下來n行,每行|si|+1個正整數,首先是|si|描述集合大小,然後是這個集合中的元素。

輸出

輸出一行乙個整數表示答案。

樣例輸入

3 5 2

4 1 2 3 5

2 2 5

2 1 2

樣例輸出

4提示

對於100%的資料,n,m,k≤500。

思路

將1點設為超級原點,m+n+3點設為超級匯點,2點設為藥點,自1點到2點的路徑權值是可用藥的最大值,英雄點與龍點超級原點用權值為1的有向邊相連,龍點與超級匯點用權值為1的有向邊相連,跑最大流演算法即可

**實現

#includeusing namespace std;

typedef long long ll;

typedef pairp;

const int n=2e6+100;

const int inf=0x3f3f3f3f;

int n,m,med,s,e;

queueq;

int next[n],edge[n],ver[n];//用結構體解在平台上t了

int cnt,head[n],dis[n];

int maxflow;

void add(int u,int v,int va)

bool bfs() }}

return false;

}int dinic(int now,int flow) //最大流演算法

}return flow-rest;

}int main()

}for(int i=1;i<=m;i++) add(2+n+i,e,1);

int nowflow=0;

while(bfs())

}printf("%d\n",maxflow);

return 0;

}

草地排水 (網路流)gzoi

農夫john不僅知道每條溝渠每分鐘可以傳輸多少加侖的水,而且知道溝渠的精確布局,將水從池塘中排出,通過複雜的網路注入到每條溝渠和溪流中。給出所有的有關資訊,確定可以從池塘中流出並流入溪流中的水的最大速率。對每個溝渠,水流的方向是唯一的,但水可以迴圈流動。輸入 輸入包含若干測試用例。對於每個測試用例,...

bzoj1084 草地排水(網路流)

時間限制 1 sec 記憶體限制 128 mb 第1行 兩個用空格分開的整數n 0 n 200 和 m 2 m 200 n是農夫約翰已經挖好的排水溝的數量,m是排水溝交叉點的數量。交點1是水潭,交點m是小溪。第二行到第n 1行 每行有三個整數,si,ei,和 ci。si 和 ei 1 si,ei m...

網路流 費用流

這個好像不考 沒事可以騙分 費用流,顧名思義,就是有費用的流,也就是說,給乙個網路流圖中的每條弧增加乙個單位流量費用。一般來說求解的費用流都是最大流最小費用。好像沒什麼好bb的 這裡推薦使用zkw演算法求解最小費用流,看著 理解就行,應該還是很好理解的。zkw演算法在稠密圖上跑得飛快,在稀疏圖上還不...