题目大意:给定一张\(N\)个点的图,构成了\(M\)个团,每个团内的边权均相等,求图上有多少个点满足到\(1\)号节点和\(N\)号节点的最大值最小。

题解:

本题的核心是如何优化连边,考虑对于每一个团增加一个虚拟节点,并让每个节点到虚拟节点连一条边权为\(t_i\)的有向边,虚拟节点到团中每一个点连一条边权为\(0\)的有向边,最后跑最短路求解即可。

注意:数据中有\(0\)下标的节点,读入时需要忽略,别问我怎么知道的。。。

代码如下

#include <bits/stdc++.h>

using namespace std;

typedef long long LL;

struct node {
int to;
LL w;
node(int _to = 0, LL _w = 0) {
to = _to;
w = _w;
}
}; int main() {
ios::sync_with_stdio(false);
cin.tie(0), cout.tie(0);
int T, kase = 0;
cin >> T;
while (T--) {
int n, m;
cin >> n >> m;
vector<vector<node>> adj(n + m);
for (int i = 0; i < m; i++) {
LL w;
int cnt;
cin >> w >> cnt;
while (cnt--) {
int x;
cin >> x;
if (x == 0) continue;
x--;
adj[i + n].emplace_back(x, 0);
adj[x].emplace_back(i + n, w);
}
}
auto dij = [&](int st) {
vector<int> expand(n + m, 0);
vector<LL> d(n + m, 1e18);
priority_queue<pair<LL, int>> q;
d[st] = 0, q.push(make_pair(0, st));
while (!q.empty()) {
int x = q.top().second;
q.pop();
if (expand[x]) continue;
expand[x] = 1;
for (auto e : adj[x]) {
int y = e.to, w = e.w;
if (d[y] > d[x] + w) {
d[y] = d[x] + w;
q.push(make_pair(-d[y], y));
}
}
}
return d;
};
vector<LL> dst = dij(0);
vector<LL> ded = dij(n - 1);
if (dst[n - 1] == 1e18) {
cout << "Case #" << ++kase << ": Evil John" << endl;
} else {
LL ans = 1e17;
vector<int> p;
for (int i = 0; i < n; i++) {
LL ret = max(dst[i], ded[i]);
if (ret < ans) {
ans = ret;
p.clear();
p.push_back(i + 1);
} else if (ret == ans) {
p.push_back(i + 1);
}
}
cout << "Case #" << ++kase << ": " << ans << endl;
cout << p[0];
for (int i = 1; i < (int)p.size(); i++) {
cout << " " << p[i];
}
cout << endl;
}
}
return 0;
}

【HDU5521】Meeting的更多相关文章

  1. 【HDOJ5521】Meeting(最短路)

    题意:有n个点,m个点集,每个点集中有e[i]个点,同一点集的点互相之间到达需要t[i]单位的时间,求min(max(dis(1,i),dis(i,n))),i属于[1,n] 输出最小值并増序输出所有 ...

  2. 【LeetCode】堆 heap(共31题)

    链接:https://leetcode.com/tag/heap/ [23] Merge k Sorted Lists [215] Kth Largest Element in an Array (无 ...

  3. 【LeetCode】排序 sort(共20题)

    链接:https://leetcode.com/tag/sort/ [56]Merge Intervals (2019年1月26日,谷歌tag复习) 合并区间 Input: [[1,3],[2,6], ...

  4. 【LeetCode】贪心 greedy(共38题)

    [44]Wildcard Matching [45]Jump Game II (2018年11月28日,算法群衍生题) 题目背景和 55 一样的,问我能到达最后一个index的话,最少走几步. 题解: ...

  5. 一、Daily Scrum Meeting【Alpha】------Clover

    [Alpha]Daily Scrum Meeting 第一次 [Alpha]Daily Scrum Meeting 第二次 [Alpha]Daily Scrum Meeting 第三次 [Alpha] ...

  6. 【Beta】 第七次Daily Scrum Meeting

    第七次meeting会议 [Beta] 第七次Daily Scrum Meeting 一.本次会议为第七次meeting会议 二.时间:10:00AM-10:20AM 地点:禹州楼 三.会议站立式照片 ...

  7. 【Alpha】Daily Scrum Meeting

    一 博客集合贴 11月15日 [Alpha]Daily Scrum Meeting——blog1 11月18日 [Alpha]Daily Scrum Meeting——blog2 11月19日 [Al ...

  8. 【Alpha】阶段第十次Scrum Meeting

    [Alpha]阶段第十次Scrum Meeting 工作情况 团队成员 今日已完成任务 明日待完成任务 刘峻辰 登出接口 编写后端说明文档 赵智源 编写脚本实现测试的持续集成 前测试点页面跳转逻辑测试 ...

  9. 【Alpha】阶段第九次Scrum Meeting

    [Alpha]阶段第九次Scrum Meeting 工作情况 团队成员 今日已完成任务 明日待完成任务 刘峻辰 编写获得所有学院接口 登出接口 赵智源 编写alpha版后测试点测试用例 编写脚本实现测 ...

随机推荐

  1. JS中删除数组中的元素方法

    删除指定下标数组元素 Array.prototype.del=function(index){ if(isNaN(index)||index>=this.length){ return fals ...

  2. 深度学习-LeCun、Bengio和Hinton的联合综述

    深度学习其实要入门也很简单,不要被深度学习.卷积神经网络CNN.循环神经网络RNN等某些“高大上”的专有名词所吓到或被忽悠,要相信大道至简,一个高中生只要愿意学也完全可以入门级了解并依赖一些成熟的Te ...

  3. SQL SERVER创建表

    创建表 create table table_name ( column_name_1 data_type, column_name_2 data_type NOT NULL, column_name ...

  4. sysbench配置使用

    unzip sysbench-0.5.zipcd sysbench-0.5 #####sysbench下载:https://codeload.github.com/akopytov/sysbench/ ...

  5. LeetCode-第 166 场周赛

    LeetCode-第 166 场周赛 1281.subtract-the-product-and-sum-of-digits-of-an-integer 1282.group-the-people-g ...

  6. win10从零安装eclipse并配置SVN和Maven

    原因:公司的新电脑,重新安装eclipse并通过SVN检入项目,中间经历了各种坎坷,终于在周五配置项目并启动成功:在此记录一下,给后来人以警戒,同时自己也可以常温常新. 刚开始安装的是eclipse4 ...

  7. nginx运行基本指令

    测试配置文件: 安装路径下的/nginx/sbin/nginx -t启动: 安装路径下的/nginx/sbin/nginx停止 安装路径下的/nginx/sbin/nginx -s stop 或者是: ...

  8. Ubuntu18.04通过网线共享网络

    Ubuntu18.04通过网线共享网络 这几天要给实验室一个新电脑装系统,但是实验室路由器好像有点问题,所以决定共享我的笔记本的网络,但是搜了很多教程都是基于Ubuntu16.04的,而Ubuntu1 ...

  9. JavaScript随机验证码

    利用canvas制作一个随机验证码: 1.clearRect:context.clearRect(x,y,width,height);清空给定矩形内的指定像素 2.fillStyle:设置画笔的颜色 ...

  10. oracle wm_concat函数用法

    在Oracle中使用wm_concat(column)可以实现字段的分组合并,逗号分隔.