传送门

学习来自于:http://www.cnblogs.com/Lubixiaosi-Zhaocao/p/9951711.html

题目大意:

一个无向图,各点到点1的最短距离为di,保证满足条件删除m-k条边之后使得到点1的距离仍为di的点数量最多的情况下,输出剩余的k条边的编号(输入顺序即编号)

思路:
因为都是和1的最短距离,是单源最短路,所以应该会用到Dijkstra算法,但是他要输出剩余的k条边,这里可以用一个bfs,贪心从1号开始取和以1号为前驱为最短距离的边,然后再将这条边的另一个节点加入队列。所以在跑Dijkstra时,要保存到点i最短路的前驱father[i], 最后就是在这一颗由最短路构成的树上bfs

//#include<bits/stdc++.h>
#include<iostream>
#include<cstdio>
#include<queue>
#include<stack>
#include<map>
#include<string>
#include<cstring>
#include<algorithm>
#include<limits.h>
using namespace std;
typedef long long ll;
const ll INF=LONG_LONG_MAX;
const ll inf=LONG_LONG_MIN;
const ll maxn=3e5+5;
ll n,m,k;
struct node {ll p; //当前点 ll dis; //到改点的距离 node(ll np=0,ll ndis=0) {p=np,dis=ndis;}bool operator <(const node& x)const {return dis>x.dis;}
};
struct edge {ll id; ll to;ll w;edge(ll nid=0,ll nto=0,ll nw=0) {id=nid,to=nto,w=nw;}
};
ll father[maxn],faedge[maxn];
vector<edge> e[maxn];
bool vis[maxn];
ll dist[maxn];
void Dijkstra() {memset(dist, 0x3f, sizeof(dist));memset(vis, false, sizeof(vis));dist[1]=0;father[1]=1;priority_queue<node> q;q.push(node(1,0));while(!q.empty()) {node tmp=q.top();q.pop();int np=tmp.p;if(vis[np])continue;else {vis[np]=1;for(int i=0; i<e[np].size(); ++i) {edge ne=e[np][i];ll nto=ne.to;ll nw=ne.w;ll nid=ne.id;if(dist[nto]>dist[np]+nw) {dist[nto]=dist[np]+nw;father[nto]=np; //记录nto的前驱 (相当于父亲 faedge[nto]=nid; //并记录nto的前驱边 q.push(node(nto,dist[nto])); }}}}
}
vector<int> ans;
vector<int> son[maxn];
void bfs() {queue<int> q;q.push(1);while(!q.empty()&&k>0) {int tmp=q.front();q.pop();for(int i=0; i<son[tmp].size(); ++i) {int v=son[tmp][i];if(k>0) {ans.push_back(faedge[v]);q.push(v);k--;} else {break;}}}
}
int main() {scanf("%lld%lld%lld",&n,&m,&k);ll x,y,w;for(int i=1; i<=m; ++i) {scanf("%lld%lld%lld",&x,&y,&w);e[x].push_back(edge(i,y,w));e[y].push_back(edge(i,x,w));}Dijkstra();for(int i=2; i<=n; i++) {son[father[i]].push_back(i); //将父亲关系转化成儿子关系 }bfs();cout<<ans.size()<<endl;for(int i=0; i<ans.size(); ++i) {cout<<ans[i]<<' ';}cout<<endl;return 0;
}

不写这个我都快把最短路给忘了

(Div.2)D. Edge Deletion相关推荐

  1. 水平导航菜单(DIV+CSS)

    水平导航菜单(DIV+CSS) 完全用DIV+CSS做的菜单,相比传统用图片做的打开速度更快.预览最终效果>> #nav{height: 44px;width: 425px;backgro ...

  2. 【汇编语言】除法(DIV/IDIV)

    除法(DIV/IDIV) 目录 除法(DIV/IDIV) `DIV`(unsigned divide)无符号数除法 `IDIV`(signed divide)有符号数除法 DIV(unsigned d ...

  3. N01web网页设计实例作大作业(div+css) ——中国茶文化(6页) 茶文化网页制作作业_中国化(网页设计...

    web网页设计实例作业 --中国茶文化(6页) 茶文化网页制作作业_中国化(网页设计- 文章目录 web网页设计实例作业 --中国茶文化(6页) 茶文化网页制作作业_中国化(网页设计... 一.作品展 ...

  4. SMU Winter 2023 (div.2)1

    1.P8599 [蓝桥杯 2013 省 B] 带分数 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 题意:输入数字n,满足等式 n=a+b/c,a,b,c由1到9数字组成,且数字只 ...

  5. 基本网页布局(DIV+CSS)

    基本网页布局 目录 基本网页布局 一.盒子模型(网页布局的基础) 二.DIV+CSS进行网页布局 三.布局中的常用属性 四.使用DIV+CSS进行布局时要注意的问题: 一.盒子模型(网页布局的基础) ...

  6. HTML网页设计制作大作业(div+css)---浩瀚天文 (13页有二级菜单)

    ⛵ 源码获取 文末联系 ✈ Web前端开发技术 描述 网页设计题材,DIV+CSS 布局制作,HTML+CSS网页设计期末课程大作业 | | HTML期末大学生网页设计作业,Web大学生网页 HTML ...

  7. HTML网页设计制作大作业(div+css) 云南我的家乡旅游景点 带文字滚动

    Web前端开发技术 描述 网页设计题材,DIV+CSS 布局制作,HTML+CSS网页设计期末课程大作业游景点介绍 | 旅游风景区 | 家乡介绍 | 等网站的设计与制作 HTML期末大学生网页设计作业 ...

  8. html网页设计制作大作业(div+css)个人博客(1个页面)

    临期末的,有好多web新手的小伙伴们很是发愁,网上找吧 要么付费的,要么就很复杂,根本就不像自己能做出来的.看了我这个资源或许就可以解决你这个问题喽! 作品介绍: 1.网页标题:绿色清新个人博客div ...

  9. Codeforces Round #626(Div.2) 解题报告

    Codeforces Round #626 (Div. 2, based on Moscow Open Olympiad in Informatics) [前言] 最近沉迷只狼,好久没有打CF了,水平 ...

最新文章

  1. 字节一面:如何从 100 亿 URL 中找出相同的 URL?
  2. 中国建筑行业2020年度回顾及未来展望
  3. python os
  4. asp.net Framework 与 asp.net core 知识
  5. MPLS virtual private network OptionB实验(华为设备)
  6. 高能!一大波奇葩挖矿方式来袭~
  7. 如何解决hash冲突,ThreadLocal如何解决哈希冲突
  8. 计算机网络基本知识汇总
  9. 2020switch电信最快的dns_《2020switch电信最快的dns》电影_2020switch电信最快的dns正片免费观看-深圳市创业发科技有限公司...
  10. LCP 03. 机器人大冒险-力扣双百代码
  11. php jquery 时间轴,jquery时间轴
  12. IDEA更改中文字体
  13. SpringBoot整合MongoDB实现ResultFul风格接口
  14. 传统企业如何做数字化转型?弄懂这3大底层逻辑你就懂了
  15. C# winform 学习(一)
  16. 解决idel连接mysql数据库报错问题
  17. 华为交换机、路由器配置静态路由实现不同网段通信
  18. 计算机毕业设计 HTML+CSS+JavaScript食品餐饮行业网站(10页)
  19. html哪个软件好,html5编写软件哪个好?八款html5编写软件推荐
  20. 越过长城,走向世界!中国第一封 Email 发出 30 年

热门文章

  1. GitHub搭建个人博客教程
  2. 闭门苦练Vue3后, Java一族何时一统天下?
  3. pivot的用法,一看就会
  4. 7.Wechall-------------Prime Factory by ch0wch0w(得分2个)
  5. 关于Wifi WDS的两种模式浅谈
  6. Lunix基本命令一(基本|常规操作、用户管理、文件)
  7. 2020年的计算机专业就业形势,2020年中国大学生就业报告:计算机类专业月收入最高...
  8. .net mvc controler有哪些返回值
  9. linux alsa asoc总结
  10. oracle空值减去一个数_如何把一个表里的空值置为0