題目描述
冬之國有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演算法在稠密圖上跑得飛快,在稀疏圖上還不...