吹雪吹雪吹 @ 2018-07-14 20:12:21
rt.
https://www.luogu.org/discuss/show?postid=47734
https://www.luogu.org/discuss/show?postid=43045
https://www.luogu.org/discuss/show?postid=42588
https://www.luogu.org/discuss/show?postid=41686
数据有多水就不多举例了。
这是一个模板题,设题应当以方便学习为目的。但是数据水的要** ,小数据点胡搞就能过(某些大点也是),十分不利于DeBug,甚至可能误导蒟蒻(比如说我),使ta们一直延续错误但在此可以A的写法,有违模板题的设置初衷。
建议(适用于任何其他模板题):
针对不同错误情况构造相应的小数据,方便DeBug;
增强大数据点,可综合各种可能的错误;
支持并鼓励用户构造hack数据并提交。
by 吹雪吹雪吹 @ 2018-07-14 20:15:38
消灭零回复惨案
by VenusM1nT @ 2018-07-14 20:16:03
%%%xhw大佬
by 吹雪吹雪吹 @ 2018-07-14 20:17:06
大师球~@Venus
by UKE开车自动机 @ 2018-07-14 20:50:50
你们不是同桌吗,戏这么多的吗
by memset0 @ 2018-07-18 18:48:47
所以你需要 LOJ
by GKxx @ 2018-07-19 09:54:35
@chen_zhe
by command_block @ 2018-07-24 16:02:25
dfs都过了...
#include<iostream>
#include<cstdio>
#include<vector>
#define Maxn 10000
using namespace std;
int n,m,source,sink,from,to,capacity,ans,last,cnt;
vector<int> g[Maxn+100],l[Maxn+100],b[Maxn+100];
int e[Maxn+100];
int dfs(int num,int val)
{
if (num==sink)return val;
e[num]=cnt;
for (int i=0,tmp;i<g[num].size();i++)
if (l[num][i]&&e[g[num][i]]!=cnt){
tmp=dfs(g[num][i],min(val,l[num][i]));
if (tmp){
l[num][i]-=tmp;
l[g[num][i]][b[num][i]]+=tmp;
return tmp;
}
}
}
int main()
{
scanf("%d%d%d%d",&n,&m,&source,&sink);
for (int i=1;i<=m;i++){
scanf("%d%d%d",&from,&to,&capacity);
g[from].push_back(to);
l[from].push_back(capacity);
g[to].push_back(from);
l[to].push_back(0);
b[from].push_back(g[to].size()-1);
b[to].push_back(g[from].size()-1);
}last=-1;
while(ans!=last){
last=ans;cnt++;
ans+=dfs(source,1000000000);
}cout<<ans;
return 0;
}
1964ms
by CYSCYS @ 2018-07-25 08:39:04
Dinic没建反边都过了。。。
by nflsjxc @ 2018-08-04 12:09:18
dinic写炸了也过了