poj3621 二分+spfa
来源:互联网 发布:旧版淘宝下载安装 编辑:程序博客网 时间:2024/05/21 09:01
题目大意:给出一个有向图,问求一个回路,使得回路上的 点权之和/边权之和 最大。
分析:对于此题,设happy[u]为点u的欢乐值,w[u][v]为u–>v的边权值。要求的是(happy[1]+happy[2]+…+happy[n]) / (w[1][2]+…+w[n-1][n]) = ans,设ans就是所求的最大值。
现在二分答案,检查x是否满足要求。即比较(happy[1]+happy[2]+…+happy[n]) / (w[1][2]+…+w[n-1][n]) 与 x的大小关系。两边同乘(w[1][2]+…+w[n-1][n])再移项,得 x*w[u][v]-happy[v].
令其等于t,若t<0,则x<ans,否则x>ans,继续二分,得到答案。我们重新构造一幅图,使得边权为happy[v] - ans*w[u][v]。用SPFA算法。
#include<cstdio>#include<algorithm>#include<cstring>#include<cmath>#include<vector>#include<queue>using namespace std;const int maxn=1010;const int maxm=5010;const int INF=1e9;vector<int>g[maxn],w[maxn];int n,m;int a[maxn];void add(int x,int y,int z){ g[x].push_back(y); w[x].push_back(z);}int vis[maxn],cnt[maxn];double dis[maxn];bool spfa(double x){ queue<int>q; for(int i=1;i<=n;i++){ vis[i]=0; dis[i]=INF; cnt[i]=0; } dis[1]=0; vis[1]=1; q.push(1); cnt[1]++; while(!q.empty()){ int u=q.front();q.pop(); vis[u]=0; for(int i=0;i<g[u].size();i++){ int v=g[u][i]; double dist=x*w[u][i]-a[v]; if(dis[v]>dis[u]+dist){ dis[v]=dis[u]+dist; if(!vis[v]){ vis[v]=1; q.push(v); if(++cnt[v]>n) return 1; } } } } return 0;}int main(){ int i,j,k; scanf("%d%d",&n,&m); for(i=1;i<=n;i++){ scanf("%d",&a[i]); } for(i=1;i<=m;i++){ int x,y,z; scanf("%d%d%d",&x,&y,&z); add(x,y,z); } double l=0,r=10000,ans=0; while(l+1e-3<=r){ double mid=(l+r)/2; if(spfa(mid)){ ans=mid; l=mid; }else r=mid; } printf("%.2f",ans); return 0;}
1 0
- poj3621 二分+spfa
- POJ3621-平均最短路,二分
- POJ3621 Sightseeing Cows 分数规划 SPFA求最小环
- POJ3621 sightseeing cows 01分数规划+SPFA判定
- poj3621:Sightseeing Cows(0/1分数规划、SPFA判负环)
- 二分+SPFA
- poj 3621 二分+spfa
- HDU 2962(SPFA+二分)
- 二分+SPFA--poj3662
- hdu2962 二分 + spfa
- poj3662 二分+spfa
- uva11090(二分spfa)
- hdu1839 spfa+二分查找
- 【二分答案+spfa】架设电话线
- City Tour+SPOJ+二分+spfa
- poj 3621 二分+spfa判负环
- hdu 2962 Trucking【二分+SPFA】
- POJ 3662(二分+SPFA)
- spring-boot 代码生成工具
- 【数据结构】算法8.3 广义表遍历算法
- spring-boot集成sitemesh装饰器
- Discoverer
- spring-boot集成EasyUI和KindEditor
- poj3621 二分+spfa
- spring-boot集成Quartz
- 根据字段名称查询数据库表名
- 2017微软校园招聘笔试题
- 聚焦和增强卷积神经网络
- Linux Nginx 配置 PHP CI 框架 vhost 文件
- PendingIntent
- UVA 11300 Spreading the Wealth 中位数 *
- C++中静态变量static使用说明