[CF1076D] Edge Deletion - Dijkstra,最短路径树
时间:2020-03-27
本文章向大家介绍[CF1076D] Edge Deletion - Dijkstra,最短路径树,主要包括[CF1076D] Edge Deletion - Dijkstra,最短路径树使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
给定无向带权连通图,保留至多 \(k\) 条边,最大化到 \(1\) 号节点最短路长度不变的点的数量。
Solution
一个显然的做法是,构建原图的一棵最短路径树,任意选择一个大小为 \(k\) 的包含根的连通块就是答案
另一方面,我们回归到 Dijkstra 算法的原理,不难发现,我们只需要在算法加了 \(k\) 条边以后停止,当前选择的边集就是答案
#include <bits/stdc++.h>
using namespace std;
#define reset3f(x) memset(x,0x3f,sizeof x)
#define int long long
const int N = 1000005;
int n,m,k,t1,t2,t3;
struct pii {
int first,second,third;
};
map<int,int> mp;
namespace sp {
const int N=1e+6+5;
vector<pii> g[N];
int n,v0=1,d[N],pre[N];
void make(int t1,int t2,int t3,int t4) {
g[t1].push_back({t2,t3,t4});
g[t2].push_back({t1,t3,t4});
}
void reset_graph() {
for(int i=0;i<=n;i++) g[i].clear();
}
void solve() {
priority_queue<pair<int,int> > qu;
reset3f(d);
d[v0]=0;
qu.push(make_pair(0,v0));
while(qu.size()) {
int p=qu.top().second,r=qu.top().first;
qu.pop();
if(r+d[p]) continue;
if(pre[p]) mp[pre[p]]++;
if(mp.size()>=k) {
for(auto i=mp.begin();i!=mp.end();i++)
cout<<i->first<<" ";
exit(0);
}
for(int i=0;i<g[p].size();i++) {
int q=g[p][i].first,w=g[p][i].second;
if(d[q]>d[p]+w) {
d[q]=d[p]+w;
qu.push(make_pair(-d[q],q));
pre[q]=g[p][i].third;
}
}
}
}
}
signed main() {
ios::sync_with_stdio(false);
cin>>n>>m>>k;
k=min(k,n-1);
cout<<k<<endl;
for(int i=1;i<=m;i++) {
cin>>t1>>t2>>t3;
sp::make(t1,t2,t3,i);
}
sp::solve();
}
原文地址:https://www.cnblogs.com/mollnn/p/12584191.html
- 提高服务器程序性能的一些方法
- A+B for Matrices 及 C++ transform的用法
- socket读写返回值的处理
- 记录服务上线一年来的点点滴滴
- 实现两个N*N矩阵的乘法,矩阵由一维数组表示
- C++实现线程安全的单例模式
- 实现两个N*N矩阵的乘法,矩阵由一维数组表示
- 一步一步实现读写锁
- 二维数组的查找
- 从I/O复用谈epoll为什么高效
- C++ STL算法系列2---find ,find_first_of , find_if , adjacent_find的使用
- 2017企业安全技术热词有哪些?
- Raft协议实战之Redis Sentinel的选举Leader源码解析
- 进制之间的转换
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- Linux笔记(14)| 字符设备驱动基础入门(续)
- scRNAseq包更新动作太大
- Linux笔记(13)| 字符设备驱动基础入门
- 你要的rmarkdown文献图表复现全套代码来了(单细胞)
- 祖传的单个10x样本的seurat标准代码
- 浏览器输入某URL后,HTTP开启了一段奇妙之旅!
- 【Pytorch】笔记一:数据载体张量与线性回归
- 为什么我不再用Redux了
- 【Pytorch 】笔记二:动态图、自动求导及逻辑回归
- 听说国漫最近崛起了,那我们就来爬几部国漫看看(动态加载,反爬)
- 微信小程序开发实战(25):预览图像
- 【Pytorch】笔记三:数据读取机制与图像预处理模块
- 表白利器,马赛克拼贴照片制作
- 【014期】JavaSE面试题(十四):基本IO流
- 微信小程序开发实战(24):选择图像