L3-005. 垃圾箱分布

题目链接:https://www.patest.cn/contests/gplt/L3-005

Dijstra

L2-001.紧急救援类似,是Dijstra最短路的拓展,要注意排序是按照:

1.到所有居民点的最小距离的最大;

2.平均距离最短;

3.编号最小.

代码如下:

 #include<cstdio>
#include<cstring>
#include<cmath>
#include<algorithm>
#define N 1000
#define M 10
#define EPS 1e-8
using namespace std;
const int INF=0x3fffffff;
int mp[N+M+][N+M+];
int n,m,d;
int Dis[M+][N+M+];
bool out[N+M+];
struct res{
double ave,mindis;
int num;
bool mark;
};
res r[];
int inti(char a[]);
void dijstra(int x);
bool compare(res a,res b){
if(a.mindis!=b.mindis)
return a.mindis>b.mindis;
else{
if(fabs(a.ave-b.ave)<EPS)
return a.num<b.num;
else
return a.ave<b.ave;
}
}
int main(void){
//freopen("in.txt","r",stdin);
int k;
for(int i=;i<=N+M;i++)
for(int j=;j<=N+M;j++)
mp[i][j]=INF;
scanf("%d%d%d%d",&n,&m,&k,&d);
while(k--){
char a[][];
int b[],dis;
scanf("%s%s%d\n",a[],a[],&dis);
for(int i=;i<;i++){
if(''<=a[i][]&&a[i][]<='')
b[i]=inti(a[i]);
else
b[i]=N+inti(&a[i][]);
}
mp[b[]][b[]]=mp[b[]][b[]]=dis;
}
for(int i=;i<=m;i++){
for(int j=;j<=N+m;j++)
Dis[i][j]=INF;
memset(out,,sizeof(out));
dijstra(i);
}
for(int i=;i<=m;i++){
r[i].mindis=INF;
r[i].num=i;
for(int j=;j<=n;j++){
if(Dis[i][j]!=INF){
if(Dis[i][j]>d)
r[i].mark=;
if(r[i].mindis>Dis[i][j])
r[i].mindis=Dis[i][j];
r[i].ave+=Dis[i][j];
}
}
r[i].ave/=n;
}
sort(&r[],&r[]+m,compare);
bool flag=;
for(int i=;i<=m;i++){
if(r[i].mark)continue;
printf("G%d\n",r[i].num);
printf("%.1lf %.1lf\n",r[i].mindis,r[i].ave);
flag=;
break;
}
if(flag)
printf("No Solution\n");
return ;
}
int inti(char a[]){
int len=strlen(a);
int temp=;
for(int i=;i<len;i++)
temp=temp*+(a[i]-'');
return temp;
}
void dijstra(int x){
Dis[x][N+x]=;
while(){
int Min=INF,index;
for(int i=;i<=N+m;i++){
if(out[i]&&Min>Dis[x][i]){
Min=Dis[x][i];
index=i;
}
}
if(Min==INF)break;
out[index]=;
for(int i=;i<=N+m;++i){
if(out[i]&&Dis[x][index]+mp[index][i]<Dis[x][i])
Dis[x][i]=Dis[x][index]+mp[index][i];
}
}
}

如有更好的方法,望不吝赐教!!

L3-005. 垃圾箱分布的更多相关文章

  1. PAT 垃圾箱分布(30分)dijstra

    垃圾箱分布 时间限制 200 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 陈越 大家倒垃圾的时候,都希望垃圾箱距离自己比较近,但是谁都不愿意守着垃圾 ...

  2. PAT天梯赛练习题——L3-005. 垃圾箱分布(暴力SPFA)

    L3-005. 垃圾箱分布 时间限制 200 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 陈越 大家倒垃圾的时候,都希望垃圾箱距离自己比较近,但是谁 ...

  3. 【最短路+较复杂处理】PAT-L3-005. 垃圾箱分布

    L3-005. 垃圾箱分布 大家倒垃圾的时候,都希望垃圾箱距离自己比较近,但是谁都不愿意守着垃圾箱住.所以垃圾箱的位置必须选在到所有居民点的最短距离最长的地方[此处为第一重排序选择的条件],同时还要保 ...

  4. PAT L3-005. 垃圾箱分布

    最短路. 枚举垃圾箱放哪里,然后算最短路. #include<map> #include<set> #include<ctime> #include<cmat ...

  5. PAT天梯赛L3-005 垃圾箱分布

    题目链接:点击打开链接 大家倒垃圾的时候,都希望垃圾箱距离自己比较近,但是谁都不愿意守着垃圾箱住.所以垃圾箱的位置必须选在到所有居民点的最短距离最长的地方,同时还要保证每个居民点都在距离它一个不太远的 ...

  6. PTA刷题笔记

    PTA刷题记录 仓库地址: https://github.com/Haorical/Code/tree/master/PTA/GPLT 两周之内刷完GPLT L2和L3的题,持续更新,包括AK代码,坑 ...

  7. PAT团体程序设计天梯赛 - 模拟赛

    由于本人愚笨,最后一题实在无力AC,于是只有前14题的题解Orz 总的来说,这次模拟赛的题目不算难,前14题基本上一眼就有思路,但是某些题写起来确实不太容易,编码复杂度有点高~ L1-1 N个数求和 ...

  8. 理解 OpenStack 高可用(HA)(2):Neutron L3 Agent HA 之 虚拟路由冗余协议(VRRP)

    本系列会分析OpenStack 的高可用性(HA)概念和解决方案: (1)OpenStack 高可用方案概述 (2)Neutron L3 Agent HA - VRRP (虚拟路由冗余协议) (3)N ...

  9. VXLAN, 一种叠加在L3网络上的L2网络

    这几天看了下RFC7348,顺便翻译了一下,根据自己理解做了注解 虚拟化及租户隔离 服务器虚拟化增加了对物理网络基础设施的需求,服务器有多个虚机,要求交换机支持更大的MAC地址表. 在数据中心场景下, ...

随机推荐

  1. Java 编译打包命令

    背景 编译 打包 解压 运行 参考 背景 我们有的时候总是要使用将自己写的工程编译成 class 文件,同时打包成 jar,虽然有各种工具可以帮助我们,但是毕竟掌握使用 java 本来的命令去做这些更 ...

  2. Centos 7 拨号上网(PPPOE)

    rp-pppoe 注意事项 网卡名称要填对,用 ifconfig 查看 有人说要卸载 NetworkManager,其实没必要,不冲突 pppoe-stop && pppoe-star ...

  3. 【USACO】滑雪课程

    滑雪课程贝西去科罗拉多州去滑雪,不过还她不太会玩,只是个能力为 1 的渣渣.贝西从 0 时刻进入滑雪场,一到 T 时刻就必须离开.滑雪场里有 N 条斜坡,第 i 条斜坡滑行一次需要 Di 分钟,要求游 ...

  4. hdu 5996 dingyeye loves stone(博弈)

    题目链接:hdu 5996 dingyeye loves stone 题意: 给你一棵树,树的每一个节点有a[i]个石子,每个人可以将这个节点的石子移向它的父亲,如果没有合法操作,那么就算输,现在给你 ...

  5. 动态网站加速,cdn义不容辞

    "双十一"大战已经落下帷幕,各大电商纷纷拿出了亮眼的成绩单,但在这些成绩单的背后,CDN加速技术是功不可没的.随着互联网的发展,电商.视频直播等网站的火热,以及各个云加速平台的流行 ...

  6. nginx https 配置

    1.创建证书并下载(下载完成后有两个文件) *.pem *.key 2.将两个文件放在linux 某个目录下 3.配置nginx的conf配置文件 server{ # https 端口默认不是80,是 ...

  7. JS 获取网页的宽高

    网页可见区域宽: document.body.clientWidth网页可见区域高: document.body.clientHeight网页可见区域宽: document.body.offsetWi ...

  8. HDU 5868 Different Circle Permutation

    公式,矩阵快速幂,欧拉函数,乘法逆元. $an{s_n} = \frac{1}{n}\sum\limits_{d|n} {\left[ {phi(\frac{n}{d})×\left( {fib(d ...

  9. python流程控制:while循环

    python编程中whihe语句用于循环执行程序,即在某条件下,循环执行某段程序,以处理需要重复处理的相同任务. while循环语句格式: while <判断条件>: 执行语句 count ...

  10. 5.Struts2的OGNL表达式

    1.创建javaweb项目Struts2_Part4_OGNL并在WebRoot下的WEB-INF下的lib文件夹下添加如下jar文件 commons.jar commons.jar freemark ...