最短路树就是用bfs走一遍就可以了 d[v] = d[u] + 1 表示v是u的前驱边

然后遍历每个结点 存下它的前驱边 再用dfs遍历每个结点 依次取每个结点的某个前驱边即可

#include <bits/stdc++.h>
#define mem(a, b) memset(a, b, sizeof(a))
using namespace std;
const int maxn = 1e6+10, INF = 0x7fffffff;int n, m, k, cnt;
int head[maxn], d[maxn];
vector<int> f[maxn];
vector<string> g;
char str[maxn];
struct node
{int u, v, next;
}Node[maxn<<1];void add_(int u, int v)
{Node[cnt].u = u;Node[cnt].v = v;Node[cnt].next = head[u];head[u] = cnt++;
}void add(int u, int v)
{add_(u, v);add_(v, u);
}void init()
{mem(head, -1);cnt = 0;
}void dfs(int u)
{if(g.size() >= k) return;if(u == n+1) { g.push_back(str); return; }//cout<< 111 <<endl;for(int i=0; i<f[u].size(); i++){str[f[u][i]/2] = '1';// cout<< str <<endl;dfs(u+1);str[f[u][i]/2] = '0';}
}void bfs(int u)
{mem(d, -1);queue<int> Q;Q.push(u);d[u] = 0;while(!Q.empty()){int u = Q.front(); Q.pop();for(int i=head[u]; i!=-1; i=Node[i].next){node e = Node[i];if(d[e.v] == -1){d[e.v] = d[u] + 1;Q.push(e.v);}}}
}int main()
{init();int u, v;cin>> n >> m >> k;for(int i=0; i<m; i++){cin>> u >> v;add(u, v);}bfs(1);// cout<< 11 <<endl;for(int i=1; i<=n; i++){for(int j=head[i]; j!=-1; j=Node[j].next)if(d[Node[j].v] + 1 == d[i]){f[i].push_back(j);// cout<< i << "  " << j/2 <<endl;
            }}for(int i=0; i<m; i++) str[i] = '0';dfs(2);cout<< g.size() <<endl;for(int i=0; i<g.size(); i++){cout<< g[i] <<endl;}return 0;
}

转载于:https://www.cnblogs.com/WTSRUVF/p/9637741.html

Berland and the Shortest Paths CodeForces - 1005F(最短路树)相关推荐

  1. 最短路径(Shortest Paths)

    最短路径 最短路径(Shortest Paths) 最短路径问题一直是图论研究的热点问题.例如在实际生活中的路径规划.地图导航等领域有重要的应用.关于求解图的最短路径方法也层出不穷,本篇文章将详细讲解 ...

  2. 【CodeForces - 545 ABCDE套题训练题解】贪心, 构造,模拟,dp,最短路树(Dijkstra+变形)

    A: 题干: Input The first line contains integer n (1 ≤ n ≤ 100) - the number of cars. Each of the next  ...

  3. (Shortest Paths Algorithm)

    最短路算法(Shortest Paths Algorithm) 假如你有一张地图,地图上给出了每一对相邻城市的距离,从一个地点到另外一个地点,如何找到一条最短的路? 最短路算法要解决的就是这类问题.定 ...

  4. Sum of Paths CodeForces - 1467D

    Sum of Paths CodeForces - 1467D Tagscombinatorics dp math *2200 题意: 定义一条好的路径,当且仅当从任意点出发之后恰好经过了 k 次移动 ...

  5. CodeForces - 1076D Edge Deletion(最短路+贪心/最短路树+bfs)

    题目链接:点击查看 题目大意:给出一张 n 个点 m 条边的带权无向图,设 d[i]d[ i ]d[i] 为从点 1 到点 i 的最短路,现在要求保留最多 k 条边,使得新图中 d′[i]=d[i]d ...

  6. Educational Codeforces Round 54 (Rated for Div. 2): D. Edge Deletion(最短路树)

    题意: 给你n个点m条边的无向图,其中1号节点是市中心,你现在最多只能保留k条边,并要求所有点到市中心的最短路尽量不变(也就是说设点i到点1的最短路为di,那么删边之后,要保证尽可能多的点,它到1的最 ...

  7. BZOJ1975[Sdoi2010]魔法猪学院——可持久化可并堆+最短路树

    题目描述 iPig在假期来到了传说中的魔法猪学院,开始为期两个月的魔法猪训练.经过了一周理论知识和一周基本魔法的学习之后,iPig对猪世界的世界本原有了很多的了解:众所周知,世界是由元素构成的:元素与 ...

  8. Loj#2769-「ROI 2017 Day 1」前往大都会【最短路树,斜率优化】

    正题 题目链接:https://loj.ac/p/2769 题目大意 给出nnn个点mmm条地铁线路,每条线路是一条路径. 求111到nnn的最短路且在最短路径的情况下相邻换乘点的距离平方和最大. 1 ...

  9. 传送门(最短路树+可并堆)

    Description 有一张n个点m条边的无向图,求删去任意一条边后,从S到T的最短距离的最大值 n, m ≤ 2×1052 \times 10^52×105 Solution 这道题是[USACO ...

最新文章

  1. Laravel5.4重新登陆跳转到登陆前页面的原理和实现
  2. HOWTO:如何修改InstallShield的运行环境
  3. NYOJ练习题 how many hairstyles can they see?
  4. python中sorted_Python中sorted()方法的用法
  5. apache phoenix 入门_实现Phoenix入门
  6. man hdparm
  7. asm-3.3.1.jar详解 (转)
  8. Android 实现图片画画板
  9. Codeforces Bubble Cup 8 - Finals [Online Mirror] B. Bribes lca
  10. loj10131 暗的连锁
  11. Dijkstra最短路径算法
  12. 1.2 iostream库简介
  13. 2021-05-19 退役啦
  14. 做减肥产品微商地推用什么做引流?如何选择转化率较高的地推方式
  15. html移动图片广告代码,右下角弹出广告代码 控制div移动 1)div是否
  16. VScode 用socks5代理连接远程服务器
  17. 数学函数最小值为什么可以通过导数=0来求出呢?
  18. matlab输入一个3位整数,matlab随机产生一个3位整数,将它的十位数变为0。例如,输入738则输出708。...
  19. FPGA|通过AS下载固化
  20. 互联网创业如何起步(一)

热门文章

  1. LeetCode 求解电话号码组合(分治法求解)
  2. 修改手游服务器端数据库,手游服务端框架之配置与玩家数据库设计
  3. 能源36号文解读_电机暴露细节!春风发布新能源品牌:ZEEHO极核
  4. 【特别版】考证与学习,结构与功能,之间的因果关系
  5. 【NOIP2007】【Luogu1093】奖学金
  6. python2中的print语句可以不用小括号。_Python 2.7终结于7个月后,这是你需要了解的3.X炫酷新特性...
  7. SQL Server高级查询之常见数据库对象(视图)第五章节
  8. 模糊rbf神经网络基于c语言,基于神经网络的交流伺服系统的智能研究
  9. python接口自动化是什么_Python接口自动化测试(一)什么是接口?
  10. Codeforces Round #468 (Div. 2): E. Game with String