我打的是loj的板子,因為比較全
具體做法就是將每一條限制為[l,r]的邊(u,v)拆開
連線(s,v)容量為l,(u,t)容量為l,(u,v)容量為r-l
大家可以感性地理解一下
資料範圍大的時候,可以先記錄每個點與起點終點的流量,最後減一減,一起連邊就好了
**:
#include
#include
#include
#include
#include
#include
#define ll long long
using
namespace
std;
inline
int read()
const
int n=205,m=1e5+5,inf=0x3f3f3f3f;
int n,m,s,t,tot=-1,sum;
int head[n],to[m],next[m],flow[m],cur[n],ans[m];
int d[n],q[n],check1[m],check2[m],down[m],up[m],id[m];
inline
void addedge(int x,int y,int l)
inline
void ins(int x,int y,int lower,int upper)
inline
bool bfs()}}
return d[t]^inf;
}inline
int dfs(int x,int a)
}return f;
}inline
void dinic()
}int main()
dinic();
bool flag=1;
for(int i=1;i<=sum;++i)
}if(flag)
else
printf("no");
return
0;}
建立超源超匯ss,tt
然後連一條(t,s)容量inf
像之前那樣跑就好了,可以判無解
然後有解的話,跑s-t最大流就好了
**:
#include
#include
#include
#include
#include
#include
#define ll long long
using
namespace
std;
inline
int read()
const
int n=205,m=1e5+5,inf=0x3f3f3f3f;
int n,m,s,t,tot=-1,sum,ss,tt;
int head[n],to[m],next[m],flow[m],cur[n],ans[m];
int d[n],q[n],check1[m],check2[m],down[m],up[m],id[m];
inline
void addedge(int x,int y,int l)
inline
void ins(int x,int y,int lower,int upper)
inline
bool bfs()}}
return d[tt]^inf;
}inline
int dfs(int x,int a)
}return f;
}inline
void dinic()
}inline
int dinic2()
return f;
}int main()
addedge(t,s,inf);
dinic();
bool flag=1;
for(int i=1;i<=sum;++i)
}if(!flag)
int ans=dinic2();
printf("%d",ans);
return
0;}
建立ss,tt,然後先跑ss-tt最大流
再連(t,s)容量inf,跑s-t最大流就好了
**:
#include
#include
#include
#include
#include
#include
#define ll long long
using
namespace
std;
inline
int read()
const
int n=5e4+5,m=8e5+5,inf=0x3f3f3f3f;
int n,m,s,t,tot=-1,sum,ss,tt;
int head[n],to[m],next[m],flow[m],cur[n],ans[m];
int d[n],q[n],check1[m],check2[m],down[m],up[m],id[m];
inline
void addedge(int x,int y,int l)
inline
void ins(int x,int y,int lower,int upper)
inline
bool bfs()}}
return d[tt]^inf;
}inline
int dfs(int x,int a)
}return f;
}inline
int dinic()
return f;
}int main()
int ans=0;
dinic();
addedge(t,s,inf);ans=tot-1;
dinic();
bool flag=1;
for(int i=1;i<=sum;++i)
}if(!flag)
printf("%d",inf-flow[ans]);
return
0;}
上下界網路流初探
看文章各種不明真相.請教了一下iwtwiioi大牛.大致有個理解.建模過程 1.拆邊.對於每一條給出的有向邊 u,v,c,d 其中c指下界,d指上界,那麼在實際的圖中連三條只有上界沒有下界的邊 s,v,c u,t,c u,v,d c 其中s是超級源,t是超級匯.不同於題目給出的源與匯 一條是超級源連...
上下界網路流專題
給定n點m邊無向圖,用k個人從起點出發,乙個人走一條路代價為路的長度li,你希望按照0,1,2,n的順序依次經過這些點,其中經過的定義是任何1人經過該點,問k個人最小的道路總和。n 150,m 20 000,1 k 10,li 10 000 考慮每次只有1個人走1步,已經過t點,則每次其中一人走向t...
有上下界網路流
前言 下面寫得只是一些十分基礎的東西,是給我以後自己看的,想要徹底弄明白這個內容,推薦去看liu runda。注 為了方便,下面所有的 x,y,l,r 都表示一條從x連向y,流量下界為l,流量上界為r的邊。問題簡述 給出乙個有向圖,每條邊有流量上下界,沒有源點和匯點,要求找到一種流的方法,使得每個點...