Contest20140710 loop bellman-ford求负环&&0/1分数规划
loop|loop.in|loop.out
题目描述:
给出一个有向带权图,权为边权,求一个简单回路,使其平均边权最小。
简单回路指不多次经过同一个点的回路。
输入格式:
第一行两个整数,表示图的点数n和图的边数m。
接下来m行,每行三个整数a,b,c表示一条从a指向b权为c的有向边。
输出格式:
一行一个实数,表示最小平均边权,保留两位小数。
样例输入:
4
5
1
2 3
2
3 5
3
1 4
3
4 3
4
1 2
样例输出:
3.25
数据范围:
30%
n<=10 ,m<=20
100%
n<=600,m<=1000,0<=c<=32768
保证原图强连通,无自环
hja的优化方法:类似题目可以将浮点数乘10000转换为整数,但是有爆int的风险。
求负环用bellman-ford O(NV)
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
#define MAXN 660
#define MAXE 5000
#define PROB "loop"
#define eps 1e-4
#define INF 0x3f3f3f3f3f3f3f3fLL
#define inf 1E1000
#ifdef unix
#define LL "%lld"
#else
#define LL "%I64d"
#endif
typedef long long qword;
struct edge
{
int x,y;
qword z;
}el[MAXE];
qword dis[MAXN];
int main()
{
freopen(PROB".in","r",stdin);
//freopen(PROB".out","w",stdout);
int n,m;
scanf("%d%d",&n,&m);
int i,j,k,x,y;
qword z;
qword l,r,mid;
l=r=;
for (i=;i<m;i++)
{
scanf("%d%d"LL,&x,&y,&z);
x--;y--;
z*=;
el[i].x=x;
el[i].y=y;
el[i].z=z;
if(z<)l+=z;
else r+=z;
}
bool flag;
while (l+<r)
{
mid=(l+r)/;
for (i=;i<=n;i++)dis[i]=INF;
dis[]=;
flag=false;
for (i=;i<m;i++)
{
el[i].z-=mid;
}
for (i=;i<n;i++)
{
for(j=;j<m;j++)
{
if (dis[el[j].x]+el[j].z<dis[el[j].y])
dis[el[j].y]=dis[el[j].x]+el[j].z;
}
}
for (i=;i<n;i++)
{
for(j=;j<m;j++)
{
if (dis[el[j].x]+el[j].z<dis[el[j].y])
flag=true;
if (flag)break;
}
if (flag)break;
}
for(i=;i<m;i++)el[i].z+=mid;
if (flag)
{
r=mid;
}else
{
l=mid;
}
}
printf("%.2lf\n",(double)r/10000.0);
}
Contest20140710 loop bellman-ford求负环&&0/1分数规划的更多相关文章
- uva 558 - Wormholes(Bellman Ford判断负环)
题目链接:558 - Wormholes 题目大意:给出n和m,表示有n个点,然后给出m条边,然后判断给出的有向图中是否存在负环. 解题思路:利用Bellman Ford算法,若进行第n次松弛时,还能 ...
- bzoj 1486: [HNOI2009]最小圈 dfs求负环
1486: [HNOI2009]最小圈 Time Limit: 10 Sec Memory Limit: 64 MBSubmit: 1022 Solved: 487[Submit][Status] ...
- [USACO07DEC]Sightseeing Cows(负环,0/1分数规划)
[USACO07DEC]Sightseeing Cows Description Farmer John has decided to reward his cows for their hard w ...
- POJ 3259 Wormholes(最短路径,求负环)
POJ 3259 Wormholes(最短路径,求负环) Description While exploring his many farms, Farmer John has discovered ...
- bzoj3232圈地游戏——0/1分数规划+差分建模+判环
Description DZY家的后院有一块地,由N行M列的方格组成,格子内种的菜有一定的价值,并且每一条单位长度的格线有一定的费用. DZY喜欢在地里散步.他总是从任意一个格点出发,沿着格线行走直到 ...
- Bzoj1486/洛谷P3199 最小圈(0/1分数规划+spfa)/(动态规划+结论)
题面 Bzoj 洛谷 题解(0/1分数规划+spfa) 考虑\(0/1\)分数规划,设当前枚举到的答案为\(ans\) 则我们要使(其中\(\forall b_i=1\)) \[ \frac{\sum ...
- poj2728 Desert King【最优比率生成树】【Prim】【0/1分数规划】
含[最小生成树Prim]模板. Prim复杂度为$O(n^2),适用于稠密图,特别是完全图的最小生成树的求解. Desert King Time Limit: 3000MS Memory Li ...
- LOJ 3089 「BJOI2019」奥术神杖——AC自动机DP+0/1分数规划
题目:https://loj.ac/problem/3089 没想到把根号之类的求对数变成算数平均值.写了个只能得15分的暴力. #include<cstdio> #include< ...
- POJ - 2976 Dropping tests && 0/1 分数规划
POJ - 2976 Dropping tests 你有 \(n\) 次考试成绩, 定义考试平均成绩为 \[\frac{\sum_{i = 1}^{n} a_{i}}{\sum_{i = 1}^{n} ...
随机推荐
- HTML里面Textarea换行总结
近期碰到一个数据转来转去转到Textrea里面能否真正按行存放的问题,在这里总结一下: 问题描写叙述: 比方get数据到一个TextArea里面,如“AAA BBB”,想把这段文字在TextAre ...
- android自定义TabWidget
在做项目的时候,需要用到这个选项卡,刚开始看了系统的tabwidget,囧了,底边有黑线不说,还不美观,扒了好多的网页发现前辈做的能够满足自己的需求,将代码修改了下,就能用喽,伟人说过,站在前辈的肩膀 ...
- STL algorithm算法merge(34)
merge原型: std::merge default (1) template <class InputIterator1, class InputIterator2, class Outpu ...
- 【转】cocos2d-x游戏开发(八)各类构造器
欢迎转载:http://blog.csdn.net/fylz1125/article/details/8521997 这篇写cocos2d-x的构造器. cocos2d-x引入自动释放机制后,创建的对 ...
- Java基础知识强化之IO流笔记28:BufferedOutputStream / BufferedInputStream(字节缓冲区流) 之BufferedOutputStream写出数据
1. BufferedOutputStream / BufferedInputStream(字节缓冲区流)的概述 通过定义数组的方式确实比以前一次读取一个字节的方式快很多,所以,看来有一个缓冲区还是非 ...
- 自己封装的工具类,使用原生SwipeRefreshLayout+RecycleView实现下拉刷新和加载更多
实现SwipeRefreshLayout+RecycleView实现刷新 在你的xml文件里写上如下代码: <android.support.v4.widget.SwipeRefreshLayo ...
- linux lsof nmap netstat
lsof -i :22 # 显示22端口当前运行的程序 lsof -c ssh # 显示ssh进程打开的文件 lsof -p 2120 #显示进程id2120打开的文件 nmap -sP ...
- apache日志介绍
apache日志介绍: 通用日志格式: CommonLogFormat 组合日志格式: CombinedLogFormat 例如: <VirtualHost *: ...
- Java-Android 之出滚动条和卷轴页面
<?xml version="1.0" encoding="utf-8"?> <HorizontalScrollView xmlns:andr ...
- mht文件无法打开的解决办法
对于喜欢上网的人士来说,经常会将自己看到的好的文章保存下来,以便日后再次翻阅,保存方法有两种:一种是通过浏览器的收藏夹进行收藏,这种方式适合于能够一直上网的电脑:另一种是通过浏览器“文件->另存 ...