problem

L3-005 垃圾箱分布 (30分)
大家倒垃圾的时候,都希望垃圾箱距离自己比较近,但是谁都不愿意守着垃圾箱住。所以垃圾箱的位置必须选在到所有居民点的最短距离最长的地方,同时还要保证每个居民点都在距离它一个不太远的范围内。

现给定一个居民区的地图,以及若干垃圾箱的候选地点,请你推荐最合适的地点。如果解不唯一,则输出到所有居民点的平均距离最短的那个解。如果这样的解还是不唯一,则输出编号最小的地点。

输入格式:
输入第一行给出4个正整数:N(≤10
​3
​​ )是居民点的个数;M(≤10)是垃圾箱候选地点的个数;K(≤10
​4
​​ )是居民点和垃圾箱候选地点之间的道路的条数;D
​S
​​ 是居民点与垃圾箱之间不能超过的最大距离。所有的居民点从1到N编号,所有的垃圾箱候选地点从G1到GM编号。

随后K行,每行按下列格式描述一条道路:

P1 P2 Dist
其中P1和P2是道路两端点的编号,端点可以是居民点,也可以是垃圾箱候选点。Dist是道路的长度,是一个正整数。

输出格式:
首先在第一行输出最佳候选地点的编号。然后在第二行输出该地点到所有居民点的最小距离和平均距离。数字间以空格分隔,保留小数点后1位。如果解不存在,则输出No Solution。

输入样例1:
4 3 11 5
1 2 2
1 4 2
1 G1 4
1 G2 3
2 3 2
2 G2 1
3 4 2
3 G3 2
4 G1 3
G2 G1 1
G3 G2 2
输出样例1:
G1
2.0 3.3
输入样例2:
2 1 2 10
1 G1 9
2 G1 20
输出样例2:
No Solution

  • 给定一张图,n个居民点(1e3),m个垃圾点(10),k条边(1e4)。
  • 求选一个垃圾点,满足以下条件
  • 到所有居民点距离不超过DS(大家都需要垃圾箱)
  • 到所有居民点最短距离最长(谁都不想住垃圾箱旁边),同时平均距离尽可能短(大家都需要垃圾箱)

solution

  • 从每个垃圾点开始遍历,每个点跑一次Dijkstra,复杂度O(10*nlogn)
  • dist数组统计到所有居民点的距离,统计最短距离,平均距离,判断DS。维护更新最小的ans
  • 输入垃圾站字符编号问题,用数字+n处理
#include<bits/stdc++.h>
using namespace std;
const int maxn = 1050;//RE6int n, m, k, ds;
struct lajitong{string id;double minds, aveds;bool operator < (const lajitong &b){if(minds != b.minds)return minds>b.minds;if(aveds != b.aveds)return aveds<b.aveds;return id < b.id;}
};int e[maxn][maxn], dist[maxn], vis[maxn];
void Dijkstra(int u){memset(dist,0x3f,sizeof(dist));memset(vis,0,sizeof(vis));dist[u] = 0;for(int i = 1; i <= n+m; i++){int v = -1, _min = (1e9);for(int j = 1; j <= n+m; j++)if(!vis[j] && dist[j]<_min){_min = dist[j]; v= j;}if(v==-1)return ;vis[v] = 1;for(int j = 1; j <= n+m; j++){if(!vis[j] && dist[j]>dist[v]+e[v][j]){//vis[jjjjjj],NotVVVVVdist[j] = dist[v]+e[v][j];}}}
}int main(){//inputcin>>n>>m>>k>>ds;memset(e,0x3f,sizeof(e));for(int i = 0; i < k; i++){char a[10], b[10]; int c;scanf("%s%s%d",a,b,&c);int aa = (a[0]=='G' ? n+atoi(&a[1]) : atoi(a));int bb = (b[0]=='G' ? n+atoi(&b[1]) : atoi(b));e[aa][bb] = e[bb][aa] = c;}//对于每个垃圾桶,跑完dij后统计最短距离和平均距离lajitong ans;for(int i = 1; i <= m; i++){Dijkstra(n+i);double aveds = 0, minds = dist[1];int flag = 1;for(int j = 1; j <= n; j++){aveds += dist[j];minds = min(minds, dist[j]*1.0);if(dist[j]>ds)flag = 0; //dist[jjjjjj],NotIIIIII}//更新答案lajitong tmp = lajitong{"G"+to_string(i),minds,aveds/n};//cout<<flag<<"\n";if(flag && (ans.id.empty() || tmp<ans)){ans = tmp;}}if(ans.id.empty())cout<<"No Solution"<<endl;elseprintf("%s\n%.1lf %.1lf", ans.id.c_str(), ans.minds, ans.aveds);return 0;
}

【CCCC】L3-005 垃圾箱分布 (30分),Dijkstra跑n遍 = 多源最短路,emm相关推荐

  1. 【CCCC】L3-007 天梯地图 (30分),两次Dijkstra+路径打印(数据点2,4错因),90行最短题解

    problem L3-007 天梯地图 (30分) 本题要求你实现一个天梯赛专属在线地图,队员输入自己学校所在地和赛场地点后,该地图应该推荐两条路线:一条是最快到达路线:一条是最短距离的路线.题目保证 ...

  2. 【CCCC】L3-019 代码排版 (30分),大模拟

    problem L3-019 代码排版 (30分) 某编程大赛中设计有一个挑战环节,选手可以查看其他选手的代码,发现错误后,提交一组测试数据将对手挑落马下.为了减小被挑战的几率,有些选手会故意将代码写 ...

  3. 【CCCC】L3-022 地铁一日游 (30分),floyd+大模拟

    problem L3-022 地铁一日游 (30分) 森森喜欢坐地铁.这个假期,他终于来到了传说中的地铁之城--魔都,打算好好过一把坐地铁的瘾! 魔都地铁的计价规则是:起步价 2 元,出发站与到达站的 ...

  4. 【CCCC】L3-017 森森快递 (30分),线段树rmq模板+贪心排序

    problem L3-017 森森快递 (30分) 森森开了一家快递公司,叫森森快递.因为公司刚刚开张,所以业务路线很简单,可以认为是一条直线上的N个城市,这些城市从左到右依次从0到(N−1)编号.由 ...

  5. 【CCCC】L3-015 球队“食物链” (30分),搜索排列

    problem L3-015 球队"食物链" (30分) 某国的足球联赛中有N支参赛球队,编号从1至N.联赛采用主客场双循环赛制,参赛球队两两之间在双方主场各赛一场. 联赛战罢,结 ...

  6. 【CCCC】L3-014 周游世界 (30分),,DFS搜索最短路,路径打印

    problem L3-014 周游世界 (30分) 周游世界是件浪漫事,但规划旅行路线就不一定了-- 全世界有成千上万条航线.铁路线.大巴线,令人眼花缭乱.所以旅行社会选择部分运输公司组成联盟,每家公 ...

  7. 【CCCC】L3-004 肿瘤诊断 (30分),三维BFS

    problem L3-004 肿瘤诊断 (30分) 在诊断肿瘤疾病时,计算肿瘤体积是很重要的一环.给定病灶扫描切片中标注出的疑似肿瘤区域,请你计算肿瘤的体积. 输入格式: 输入第一行给出4个正整数:M ...

  8. 【CCCC】L3-002 特殊堆栈 (30分),nlogn维护序列中位数,STL大乱斗,有重multiset,vector+二分插入

    problem L3-002 特殊堆栈 (30分) 堆栈是一种经典的后进先出的线性结构,相关的操作主要有"入栈"(在堆栈顶插入一个元素)和"出栈"(将栈顶元素返 ...

  9. 【CCCC】L3-001 凑零钱 (30分),,01背包路径打印

    problem L3-001 凑零钱 (30分) 韩梅梅喜欢满宇宙到处逛街.现在她逛到了一家火星店里,发现这家店有个特别的规矩:你可以用任何星球的硬币付钱,但是绝不找零,当然也不能欠债.韩梅梅手边有 ...

最新文章

  1. 《C++游戏编程入门(第4版)》——2.4 使用带else子句的if语句序列
  2. thinkphp读写mysql的枷锁_thinkphp5 数据库配置读写分离
  3. 欧几里得距离网络_使用Tensorflow对象检测模型和OpenCV的社交距离和遮罩检测器...
  4. mysql安装版和解压版哪个好_红米k30pro变焦版和荣耀30pro哪个好-哪个更值得入手...
  5. 我为什么放弃饿了么产品总监不干,却从事自由职业?
  6. android 获取手机a标签页,Android关于对Jsoup抓取a标签和br标签之间的解决办法...
  7. 打印冻结窗格怎么保证每页都有_在打印Excel表时怎么设置才能实现每页都打印标题行...
  8. ADT 使用和问题总结
  9. OpenGL超级宝典(第7版)之第十章计算着色器
  10. ios9提取安装包ipa_iOS 应用降级与 IPA 安装包备份
  11. 安卓苹果双端五级分销影视APP源码美化版
  12. 微信公众号模板消息内容key提取代码
  13. T2695 桶哥的问题——送桶 题解
  14. 团队协作软件之confluence和jira的配套使用
  15. 聘用协议_聘用合同谈判
  16. 毕业设计--球上自平衡机器人
  17. SQL Server 2008 R2 企业版/开发版/标准版
  18. Android手写签名 附带背景图设置
  19. QQ群头像 微信群头像 多图合并框架实现
  20. 整数有约 | AI智能篆刻:活学活用,让传统文化“潮”起来

热门文章

  1. C Tricks(十一)—— 排除一个二维数组的边界
  2. matlab 矢量化编程(二)—— 使用 meshgrid
  3. 【笔试/面试】—— 数组中第二大的数
  4. Python 数据结构与算法 —— Prim 算法与小顶堆
  5. 进程间通信 IPC、LPC、RPC
  6. utilities(matlab)—— mat2imgcell
  7. 读写锁原理 java_java多线程-读写锁原理
  8. svg 动画_svg 动画介绍(一)
  9. python课程-天津Python编程课程
  10. python函数定义及调用-python函数基础(函数的定义和调用)