uva11090
来源:互联网 发布:淘宝代购包包是真的吗 编辑:程序博客网 时间:2024/05/17 22:18
模板的威力真大。。
我照着模板写,必要时把int 改为double
然后这道题用二分,,因为有模板 写的时候的衔接度很高。。。一下就能过了。。
#include<cstdio>#include<cstring>#include<algorithm>#include<queue>#include<string>#include<cstring>#include<iomanip>#include<iostream>#include<stack>#include<cmath>#include<map>#include<vector>#define ll long long#define inf 0x3f3f3f3f#define INF 1e9#define bug1 cout<<"bug1"<<endl;#define bug2 cout<<"bug2"<<endl;#define bug3 cout<<"bug3"<<endl;using namespace std;#define sf scanf#define pf printf#define mem(a,b) memset(a,b,sizeof(a));#define out(a) printf("%d\n",&a);int n,m;const int maxn=1000;struct Edge{ int from,to; double dist; Edge(int a,int b,double c){ from=a;to=b;dist=c; }};struct BellmanFord{ int n,m; vector<Edge>edges; vector<int>G[maxn]; bool inq[maxn]; double d[maxn]; int p[maxn]; int cnt[maxn]; void init(int n){ this->n=n; for(int i=0;i<n;++i)G[i].clear(); edges.clear(); } void AddEdge(int from,int to,double dist){ edges.push_back((Edge){from,to,dist}); m=edges.size(); G[from].push_back(m-1); } bool negativeCycle(){ queue<int>Q; mem(inq,0); mem(cnt,0); for(int i=0;i<n;++i){d[i]=0;inq[0]=true;Q.push(i);} while(!Q.empty()){ int u=Q.front();Q.pop(); inq[u]=false; for(int i=0;i<G[u].size();++i){ Edge& e=edges[G[u][i]]; if(d[e.to]>d[u]+e.dist){ d[e.to]=d[u]+e.dist; p[e.to]=G[u][i]; if(!inq[e.to]){ Q.push(e.to);inq[e.to]=true;if(++cnt[e.to]>n)return true; } } } } return false; }};BellmanFord solver;bool test(double x){ for(int i=0;i<solver.m;++i) solver.edges[i].dist-=x; bool ret=solver.negativeCycle(); for(int i=0;i<solver.m;++i){ solver.edges[i].dist+=x; } return ret;}int main(){ int t; sf("%d",&t); int kase=0; while(t--){ sf("%d%d",&n,&m); solver.init(n); int ub=0; for(int i=1;i<=m;++i){ int u,v,w; sf("%d%d%d",&u,&v,&w);u--;v--;ub=max(ub,w); solver.AddEdge(u,v,w); } pf("Case #%d: ",++kase); if(!test(ub+1))pf("No cycle found.\n"); else{ double L=0,R=ub; while(R-L>1e-3){ double M=L+(R-L)/2; if(test(M))R=M; else L=M; } pf("%.2lf\n",L); } }}
0 0
- uva11090
- uva11090
- uva11090
- uva11090 Going in Cycle!!
- uva11090 - Going in Cycle!!
- uva11090 spfa判负环
- uva11090(二分spfa)
- UVa11090 Going in Cycle!!
- 【UVA11090】Going in Cycle!!
- uva11090【Going in Cycle】
- 最短路判负环uva11090
- uva11090 Going in Cycle!! --- 二分+spfa判负环
- uva11090 Going in Cycle!!题解(负环)
- UVA11090 Going in Cycle!! 解题报告【判负环】【SPFA】【二分答案】
- UVA11090-Going in Cycle!!-最短路/图判环/二分
- UVA11090 [Going in Cycle!!] 二分答案+SPFA判负圈
- UVA11090 Going in Cycle!! (二分+SPFA判断有无负权)
- uva11090 给你一个有向图,求出平均权值最小的环
- 动态规划练习--26(滑雪)
- hive视图和索引的简单介绍
- C# protected修饰词
- 常见排序算法及JAVA实现
- 设计模式系列(7)线程下的懒汉式单例
- uva11090
- 听指令的小方块
- scala spark 机器学习初探
- 处理器和存储器的错位相连
- 题目1144:Freckles
- 【寒江雪】测试之前的一点准备
- AutoConfig工具使用指南
- AutoLayout——Android屏幕自动适配
- java获取JVM的CPU占用率、内存占用率、线程数及服务器的网口吞吐率、磁盘读写速率