1
已解决
陆麟瑞
资深天翼
资深天翼
AC前三个点,后面全WA。
本萌新刚学费用流,求dalao指教qwq
貌似是精度出现了问题。
各位dalao提供也可以提供hack数据。
错误代码:
#include <iostream>
#include <queue>
#include <cstring>
#include <cmath>
#include <cstdio>
using namespace std;
int maxData = 0x7fffffff;
int head[5001],net[100001],to[100001],cap[100001];
long double cost[100001];
int cnt=1;
void add(int x,int y,int c,long double z)
{
to[++cnt]=y;
cost[cnt]=z;
cap[cnt]=c;
net[cnt]=head[x];
head[x]=cnt;
}
int flow[5001];
int pre[5001];
int xb[5001];
int n,m;
int mflow=0;
long double mcost=0;
long double dis[5001];
int vis[5001];
int BFS(int s,int t)
{
for(int i=0; i<=t; i++)
dis[i]=100000000;
memset(vis,0,sizeof(vis));
int INF=dis[0];
queue<int>q;
for(int i=s;i<=t;i++)
{
pre[i]=-1;
xb[i]=-1;
}
vis[s]=1;
dis[s]=0;
pre[s]=0;
flow[s]=maxData;
q.push(s);
while(!q.empty())
{
int v=q.front();
q.pop();
vis[v]=0;
for(int i=head[v];i;i=net[i])
{
int tmp=to[i];
if(cap[i]>0&&dis[tmp]>dis[v]+cost[i])
{
dis[tmp]=dis[v]+cost[i];
pre[tmp]=v;
xb[tmp]=i;
flow[tmp]=min(flow[v],cap[i]);
if(!vis[tmp]) vis[tmp]=1,q.push(tmp);
}
}
}
//cout<<dis[t]<<endl;
if(dis[t]>=INF) return 0;
return 1;
}
void max_flow(int s,int t)
{
mcost=1;
while(BFS(s,t))
{
int k=t;
while(k!=s)
{
cap[xb[k]]-=flow[t];
cap[xb[k]^1]+=flow[t];
k=pre[k];
}
mflow+=flow[t];
mcost*=flow[t]*dis[t];
//cout<<1<<endl;
}
}
int main()
{
int s,t;
cin>>n;
for(int i=1; i<=n; i++)
for(int j=1; j<=n; j++)
{
long double c;
cin>>c;
c=c/100.00000;
add(i,j+n,1,-c);
add(j+n,i,0,c);
}
s=0,t=n*n+1;
for(int i=1; i<=n; ++i) add(s,i,1,0),add(i,s,0,0),add(i+n,t,1,0),add(t,i+n,0,0);
max_flow(s,t);
mcost=abs(mcost);
printf("%.8Lf",mcost*100,00000);
return 0;
}
陆麟瑞在2018-07-30 07:58:58追加了内容
@葛新 @李庚午 @刘孟博 @王星河
0
已采纳
赵逸凡
初级启示者
初级启示者
如果精度不够高,那就把整形数组改大或者变成字符串数组。
我是蒟蒻
赵逸凡在2018-07-30 09:13:57追加了内容
建议把92行c/100.00000改成c/ctd,定义long double,ctd=100.00000
这么难的洛谷题,能跟酷町堂的难度5的最难的题相比。
赵逸凡在2018-07-30 09:14:04追加了内容
建议把92行c/100.00000改成c/ctd,定义long double,ctd=100.00000
这么难的洛谷题,能跟酷町堂的难度5的最难的题相比。
赵逸凡在2018-07-30 09:16:14追加了内容
建议你看一下洛谷官方题解,上面说什么二分图,网络流,n=20精度必须很高,看不懂。
赵逸凡在2018-07-30 09:19:40追加了内容
0
0
0
0