Codeforces1076D. Edge Deletion(最短路树+bfs)
题目链接:http://codeforces.com/contest/1076/problem/D
题目大意:
一个图N个点M条双向边。设各点到点1的距离为di,保证满足条件删除M-K条边之后使得到点1的距离仍为di的点数量最多的情况下,输出剩余的K条边的编号(按输入顺序)。
(2≤n≤3⋅105, 1≤m≤3⋅105, n−1≤m, 0≤k≤m)
解题思路:太菜了没写出来。。。
参考自博客:https://www.cnblogs.com/Lubixiaosi-Zhaocao/p/9951711.html
用迪杰斯特拉在图中跑最短路,并且利用两个数组存被松弛节点的父节点和保存对应的边,然后用bfs贪心保留离源点近的边。
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int maxn=3e5+;
int n,m,k;
struct qnode{
int v;
ll d;
qnode(int a,ll b):v(a),d(b){}
bool operator<(const qnode& x)const{
return d>x.d;
}
};
struct edge{
int id,v;
ll w;
edge(int a,int b,ll c):id(a),v(b),w(c){}
};
vector<edge> mp[maxn];
void add(int id,int u,int v,ll w)
{
mp[u].push_back(edge(id,v,w));
mp[v].push_back(edge(id,u,w));
}
int vis[maxn],pree[maxn],pret[maxn];
ll dis[maxn];
priority_queue<qnode> pq;
void dij()
{
memset(vis,,sizeof(vis));
memset(dis,0x3f3f3f3f,sizeof(dis));
dis[]=;
pret[]=;
pq.push(qnode(,));
while(!pq.empty())
{
qnode q=pq.top();
pq.pop();
int u=q.v;
if(vis[u]) continue;
vis[u]=;
for(int i=;i<mp[u].size();i++)
{
int id=mp[u][i].id;
int v=mp[u][i].v;
ll w=mp[u][i].w;
if(!vis[v]&&dis[v]>dis[u]+w)
{
dis[v]=dis[u]+w;
pret[v]=u;
pree[v]=id;
pq.push(qnode(v,dis[v]));
}
}
}
}
vector<int> son[maxn];
queue<int> que;
vector<int> ans;
void bfs()
{
que.push();
while(!que.empty())
{
int u=que.front();
que.pop();
for(int i=;i<son[u].size();i++)
{
int v=son[u][i];
if(k>)
{
ans.push_back(pree[v]);
que.push(v);
k--;
}
else break;
}
}
} int main()
{
ios_base::sync_with_stdio(false); cin.tie();
cin>>n>>m>>k;
for(int i=;i<=m;i++)
{
int u,v;
ll w;
cin>>u>>v>>w;
add(i,u,v,w);
}
dij();
for(int i=;i<=n;i++)
son[pret[i]].push_back(i);
bfs();
cout<<ans.size()<<endl;
if(ans.size()==)
return ;
cout<<ans[];
for(int i=;i<ans.size();i++)
cout<<" "<<ans[i];
cout<<endl;
return ;
}
Codeforces1076D. Edge Deletion(最短路树+bfs)的更多相关文章
- CF1076D Edge Deletion 最短路树
问题描述 Codeforces 洛谷(有翻译) 题解 最短路树,是一棵在最短路过程中构建的树. 在\(\mathrm{Dijkstra}\)过程中,如果最终点\(y\)是由点\(x\)转移得到的,则在 ...
- CF1076D Edge Deletion 最短路径树+bfs
题目描述 You are given an undirected connected weighted graph consisting of n n n vertices and m m m edg ...
- Codeforces 1076D Edge Deletion(最短路树)
题目链接:Edge Deletion 题意:给定一张n个顶点,m条边的带权无向图,已知从顶点1到各个顶点的最短路径为di,现要求保留最多k条边,使得从顶点1到各个顶点的最短距离为di的顶点最多.输出m ...
- CF1005F Berland and the Shortest Paths (树上构造最短路树)
题目大意:给你一个边权为$1$的无向图,构造出所有$1$为根的最短路树并输出 性质:单源最短路树上每个点到根的路径 ,一定是这个点到根的最短路之一 边权为$1$,$bfs$出单源最短路,然后构建最短路 ...
- hdu 3409 最短路树+树形dp
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3409 参考博客:http://www.cnblogs.com/woaishizhan/p/318981 ...
- LA4080/UVa1416 Warfare And Logistics 最短路树
题目大意: 求图中两两点对最短距离之和 允许你删除一条边,让你最大化删除这个边之后的图中两两点对最短距离之和. 暴力:每次枚举删除哪条边,以每个点为源点做一次最短路,复杂度\(O(NM^2logN)\ ...
- 51nod 1443 路径和树(最短路树)
题目链接:路径和树 题意:给定无向带权连通图,求从u开始边权和最小的最短路树,输出最小边权和. 题解:构造出最短路树,把存留下来的边权全部加起来.(跑dijkstra的时候松弛加上$ < $变成 ...
- Berland and the Shortest Paths CodeForces - 1005F(最短路树)
最短路树就是用bfs走一遍就可以了 d[v] = d[u] + 1 表示v是u的前驱边 然后遍历每个结点 存下它的前驱边 再用dfs遍历每个结点 依次取每个结点的某个前驱边即可 #include &l ...
- Connections between cities HDU - 2874(最短路树 lca )
题意: 给出n个点m条边的图,c次询问 求询问中两个点间的最短距离. 解析: Floyd会T,所以用到了最短路树..具体思想为: 设k为u和v的最近公共祖先 d[i] 为祖结点到i的最短距离 则di ...
随机推荐
- ios不触发事件也能播放音频
ios不触发事件也能播放音频. 首先界面初始化预加载一个没有声音的音频,代码如下: html: js: $(function(){ $("#start_audio")[0].pla ...
- IdentityServer4【Topic】之StartUp中的配置
Startup 身份服务器是中间件和服务的组合.所有的配置都是在启动类中完成的. Configuring services 通过调用如下代码在DI(dependency inject,依赖注入)中添加 ...
- [转帖]buffer与cache的区别
作者:沈万马链接:https://www.zhihu.com/question/26190832/answer/146259979来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注 ...
- [转帖] BMC安全隐患
BMC再现漏洞,裸金属云服务器岌岌可危 https://zhuanlan.kanxue.com/article-8006.htm 之前有vt-x 可能有隐患 现在看起来BMC 也就是IPMI 也有隐患 ...
- 20181114教学sql
--精确查找:查询水表编号为30408的业主记录 ' --模糊查询:查询业主名称包含'刘'的业主记录 SELECT * FROM T_OWNERS WHERE NAME LIKE '%刘%' --AN ...
- 前K个高频元素
给定一个非空的整数数组,返回其中出现频率前 k 高的元素. 示例 1: 输入: nums = [1,1,1,2,2,3], k = 2 输出: [1,2] 示例 2: 输入: nums = [1], ...
- cookie路径概念理解
.创建一个cookie并设置 cookie的有效路径: $.cookie('the_cookie', 'the_value', { expires: 7, path: '/' }); 注:在默认情况下 ...
- Object.prototype.toString.call()
源码中有这样一段: class2type = {}, toString = class2type.toString, function type(obj) { //obj为null或者undefi ...
- rbac组件引用
一. 批量操作思路 # 待新增 路由系统中有,但是数据库中还没有 路由系统的集合 - 数据库中权限集合 # 待更新 路由系统中有,数据库中也有, 只是更改了一些信息 路由系统的集合 & 数据库 ...
- Django--CRM-客户列表展示, 分页
一 . 客户列表展示 为了插入数据方便,我们可以用django里面的admin插入数据 创建超级用户 把语言改成中文 结果: 列表展示 展示不同字段的方式: # 有需要的可以写 def__str__( ...