博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
洛谷1522牛的旅行
阅读量:5097 次
发布时间:2019-06-13

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

题目:

简单地求了一堆最短路而已。

1.有时候sqrt里要 * 1.0,不知何故;本题需要吗?

2.那个地方是 f [ col [ cur ] ],不是 f [ cnt ]!

*3.原来可以输入 .1%d 来限制输入一位数字,很方便!

#include
#include
#include
#include
#include
#define ll long longusing namespace std;const int N=155;const double INF=1e9+5;int n,x[N],y[N],col[N],head[N],xnt,cnt;bool b[N][N],vis[N],in[N];double dis[N][N],c[N],fx[N],f[N],ans;struct Edge{ int next,to; double w; Edge(int n=0,int t=0,double w=0):next(n),to(t),w(w) {}}edge[N*N<<1];double calc(int i,int j){
return sqrt(1.0*(x[i]-x[j])*(x[i]-x[j])+1.0*(y[i]-y[j])*(y[i]-y[j]));}void add(int x,int y){ double tp=calc(x,y); edge[++xnt]=Edge(head[x],y,tp);head[x]=xnt; edge[++xnt]=Edge(head[y],x,tp);head[y]=xnt;}void dj(int cur,bool cs){ priority_queue
,vector
>,greater
> > q; memset(in,0,sizeof in); for(int i=1;i<=n;i++)c[i]=INF; c[cur]=0;q.push(make_pair(0,cur)); while(q.size()) { int k=q.top().second;q.pop(); while(in[k]&&q.size())k=q.top().second,q.pop(); if(in[k])break; in[k]=1;if(cs)col[k]=cnt;fx[cur]=max(fx[cur],c[k]); for(int i=head[k],v;i;i=edge[i].next) if(c[k]+edge[i].w

 

转载于:https://www.cnblogs.com/Narh/p/8954470.html

你可能感兴趣的文章
Java--面向对象
查看>>
线程池(二)
查看>>
Java--异常、反射
查看>>
NIO
查看>>
同步(二) - 锁
查看>>
Linux 简介和常用命令
查看>>
同步(三) -- 同步容器
查看>>
MySQL(一)- 数据库引擎
查看>>
Dubbo
查看>>
MySQL(二)- 索引
查看>>
线程池(一)
查看>>
MySQL(三)- sql优化
查看>>
Redis入门指南(一)
查看>>
Redis入门指南(二)
查看>>
Redis入门指南(三)
查看>>
zookeeper
查看>>
LinkedList源码分析
查看>>
集合比较
查看>>
HashMap源码分析
查看>>
同步容器
查看>>