[最大费用最大流]HDU 5988 Coding Contest
来源:互联网 发布:java验证码识别算法 编辑:程序博客网 时间:2024/06/05 16:32
题:每个节点上有人和食物,有向边连接节点,属性包含通过人的数量上限ci,以及从第二个人开始对网络造成拥堵的概率pi。
问使每个人都获得食物的情况下, 拥堵的总概率最小是多少。
对于每个人经过的每条路,不对网络造成拥堵的概率为(1-pi),那么拥堵的总概率为1-(1-px)(1-py)(1-pk).....
求拥堵概率最小,即求(1-px)(1-py)(1-pk).....最大。将该式取对数,求ln(1-px)+ln(1-py)+ln(1-pk)即可套用最小费用最大流板子了。
最大费用建图:用权值相反数建图,求最小费用,最后求相反数即可。
注意浮点数比较用eps;
#include<cstdio>#include<cstdlib>#include<cstring>#include<cmath>#include<iostream>#include<algorithm>#include<vector>#include<set>#include<map>#include<stack>#include<queue>using namespace std;#pragma comment(linker, "/STACK:10240000000,10240000000")#define mem(x,y) memset(x,y,sizeof(x))#define pb push_back#define bug puts("===========");#define REP(i,n) for(int i=0;i<n;i++)#define REP1(i,n) for(int i=1;i<=n;i++)#define ALL(A) A.begin(), A.end()#define T_T for(int _=RD(),test=1;test<=_;test++)typedef long long ll;typedef pair<ll ,ll> pii;#define CHG ch=getchar()#define FRD x=bo=0; for(CHG;ch<'0'||ch>'9';CHG) if(ch=='-')bo=1;#define FR2 for(;ch>='0'&&ch<='9';x=(x<<1)+(x<<3)+ch-'0',CHG);char ch; int bo;inline bool blank(char ch){return ch==' '||ch=='\n'||ch=='\r'||ch=='\t';}inline void RD(int &x){ FRD FR2 if (bo)x=-x; }inline void RD(ll &x){ FRD FR2 if (bo)x=-x; }inline ll RD(){ ll x; RD(x); return x; }inline void RD(char *s){///scanf %s for (CHG;blank(ch);CHG); for (;!blank(ch);CHG)*s++=ch; *s=0;}inline void RD(char &c){for(CHG;blank(c);CHG);}template<class T> inline void OT(T x){ static char buf[20]; char *p1=buf;if (!x)*p1++='0';if (x<0)putchar('-'),x=-x; while(x)*p1++=x%10+'0',x/=10; while(p1--!=buf)putchar(*p1);}inline void pe(){puts("");}//输出回车inline void pk(){putchar(' ');}//输出空格const double inf=1e7;const ll mod =100000007;#define pii pair<int,int>/*======================================*/const int maxn=1e3+10;const int maxe=2e5+30;const double eps=1e-8;using namespace std;int st,en;#define mytype doublestruct Edge{ int u,v,w,next; mytype cost;}e[maxe];int ecnt,pre[maxn];void adde(int u,int v,int w,mytype cost){ e[ecnt].u=u; e[ecnt].v=v; e[ecnt].w=w; e[ecnt].cost=cost; e[ecnt].next=pre[u]; pre[u]=ecnt++; e[ecnt].u=v; e[ecnt].v=u; e[ecnt].w=0; e[ecnt].cost=-cost; e[ecnt].next=pre[v]; pre[v]=ecnt++;}void init(int ed){ ecnt=0; memset(pre,-1,sizeof(pre)); st=0,en=ed;}bool vis[maxn];int p[maxn];mytype dis[maxn];queue<int>que;bool spfa(){ while(!que.empty())que.pop(); memset(p,-1,sizeof(p)); memset(vis,0,sizeof(vis)); for(int i=st; i<=en; i++) { dis[i]=inf; } dis[st]=0; vis[st]=1; que.push(st); while(!que.empty()) { int u=que.front(); que.pop(); vis[u]=0; for(int i=pre[u]; i!=-1; i=e[i].next) { int v=e[i].v; if(e[i].w>0&&dis[v]-dis[u]-e[i].cost>eps) { dis[v]=dis[u]+e[i].cost; p[v]=i; if(vis[v]==0) { que.push(v); vis[v]=1; } } } } // printf("**%lf\n",dis[en]); if(dis[en]==inf) return false; return true;}mytype MCMF(){ int flow=0; mytype mincost=0; int minflow; while(spfa()) { minflow=inf; for(int i=p[en]; i!=-1; i=p[e[i].u]) { minflow=min(minflow,e[i].w); } for(int i=p[en]; i!=-1; i=p[e[i].u]) { e[i].w-=minflow; e[i^1].w+=minflow; } flow+=minflow; mincost+=minflow*dis[en]; } return mincost;}int main(){ T_T{ int n,m; RD(n),RD(m); int ed=n+3; init(ed); for(int i=1;i<=n;i++){ int s,g; RD(s),RD(g); int k=s-g; if(k>0)adde(0,i,k,0); else adde(i,ed,-k,0); } for(int i=0;i<m;i++){ int u,v,c; double g; RD(u),RD(v),RD(c); scanf("%lf",&g); adde(u,v,1,0); if(c-1>0) adde(u,v,c-1,-log(1-g)); } double k=MCMF(); k*=-1; double ans=1-exp(k); printf("%.2f\n",ans); } return 0;}
阅读全文
0 0
- HDU-5988 Coding Contest 最大费用流
- [最大费用最大流]HDU 5988 Coding Contest
- HDU 5988 Coding Contest(最小费用最大流)
- hdu 5988 Coding Contest (费用流)
- HDU 5988 Coding Contest(费用流)
- 【HDU 5988】 Coding Contest 【费用流】
- HDU-5988-Coding Contest(费用流)
- hdu 5988 Coding Contest (最小费用流)
- hdu 5988 Coding Contest 费用流
- HDU 5988 Coding Contest(费用流)
- hdu 5988 Coding Contest(最小费用流 骚)
- HDU 5988 Coding Contest (最小费用流)
- hdu 5988 Coding Contest (费用流变形)
- HDU 4322 最大费用最大流 2012 Multi-University Training Contest 3
- HDU 5988 最小费用最大流
- hdu 4322 最大费用最大流
- hdu 2686 Matrix 最大费用最大流
- hdu 4322(最大费用最大流)
- 【51Nod】1137 矩阵乘法
- 事务和连接池
- jquery源码分析
- [C++ Primer CH06] 第6章 函数(笔记)
- 疯狂java讲义第十六章(多线程)书后习题我的解答以及反思
- [最大费用最大流]HDU 5988 Coding Contest
- 开始写博客的一些心里话
- 关于图论的若干巴拉巴拉
- JavaScript基础
- C++程序员学Java系列之五:常量,变量,基本数据类型及转换
- 常见几种排序算法
- jquery扩展函数详解(我的人生颠覆)
- android apk安装时候遇到的各种错误集合
- [C++]C++11:Function与Bind