博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
poj 3621 Sightseeing Cows
阅读量:4873 次
发布时间:2019-06-11

本文共 1359 字,大约阅读时间需要 4 分钟。

分数规划+二分   最优比率环   

不是很难 本题中没有说明从哪个点开始 不过好像默认为1就可以过  poj数据又水了 

里面的用spfa判定部分还是不太懂 

代码及其注释:

#include
#include
#include
#include
#include
#include
using namespace std;const double eps=1e-5;const int N=1001;const int M=5005;int head[N];//邻接表头struct node{ int j,k; int next;}side[M];边int value[N];//点的价值bool in[N];//是否在队列中int innum[N];//如队列次数double dist[N];//记录queue
str;void build(int x,int t)//建树{ side[t].next=head[x]; head[x]=t;}bool spfa(double L,int n)//看是否有正环 如果有返回true{ while(!str.empty()) str.pop(); for(int i=1;i<=n;++i) { dist[i]=0.0; str.push(i); } memset(in,true,sizeof(in)); memset(innum,0,sizeof(innum)); while(!str.empty()) { int x=str.front(); str.pop(); in[x]=false; int t=head[x]; while(t!=-1) {//cout<
<
=n)//有环 return true; } } t=side[t].next; } } return false;}int main(){ // freopen("data.txt","r",stdin); int n,m; while(scanf("%d %d",&n,&m)!=EOF) { memset(head,-1,sizeof(head)); for(int i=1;i<=n;++i) scanf("%d",&value[i]); for(int i=1;i<=m;++i) { int x; scanf("%d %d %d",&x,&side[i].j,&side[i].k); build(x,i); } double l=1.0,r=200.0; while(r-l>eps)//用二分 不断向答案逼近 { double mid=(l+r)/2.0; if(spfa(mid,n)) l=mid; else r=mid; } printf("%.2f\n",l); } return 0;}

  

转载于:https://www.cnblogs.com/liulangye/archive/2012/08/06/2624764.html

你可能感兴趣的文章
hdu 4288 Coder (成都赛区 线段树)
查看>>
利用multiprocessing.managers开发跨进程生产者消费者模型
查看>>
P1002 过河卒 【递推、简单动规】
查看>>
java工厂模式(转)
查看>>
Linux——Centos 7 账户管理命令(用户篇)useradd usermod userdel
查看>>
Tips:getroproperty调试可以通过,但是运行不可以
查看>>
堆排序
查看>>
动画类的全部方法..
查看>>
python中sys.path--学习
查看>>
Entity Framework Utility .ttinclude File
查看>>
Miles per gallon to kilometers per liter
查看>>
几种方法的尾递归实现
查看>>
php qq第三方登陆
查看>>
添加共享文件夹
查看>>
左值与右值,左值引用与右值引用(C++11)
查看>>
错误:没有为扩展名“.html”注册的生成提供程序。
查看>>
javascript 中 with 的使用
查看>>
集合并卷积
查看>>
【BZOJ4998】星球联盟
查看>>
【BZOJ5015】[Snoi2017]礼物
查看>>