题目链接


题目大意:

给你一个nnn个点mmm条边的无向联通图,每条边上面都有一条权值就是输入时候的位置,然后问你从111号点出发到其他n−1n-1n−1个点最小权值是多少?路径权值是路径上面的数字拼接起来的结果,不是相加


解题思路:

  1. 如果直接拼接起来非常麻烦。情况太多了而且多位数拼接也不好理解
  2. 我们可以对这个路径进行拆边,比如说路径(u,v)权值是982(u,v)权值是 982(u,v)权值是982
  3. 那么我们可以这样(u,v′)权值是9,(v′,v′′)权值是8,(v′′,v)权值是2(u,v')权值是9,(v',v'')权值是8,(v'',v)权值是2(u,v′)权值是9,(v′,v′′)权值是8,(v′′,v)权值是2
  4. 全都变成个位数
  5. 还有就是我们拆的时候要变成单向边因为这几条路径一定要连着走完毕竟是实际上只有一条边
  6. 然后我们就对这个图进行贪心BFS:就是没扩展的时候我们先走1,然后再走2,然后再走3 …这样就可以保证最小了的

AC code

#include <bits/stdc++.h>
#define mid ((l + r) >> 1)
#define Lson rt << 1, l , mid
#define Rson rt << 1|1, mid + 1, r
#define ms(a,al) memset(a,al,sizeof(a))
#define log2(a) log(a)/log(2)
#define lowbit(x) ((-x) & x)
#define IOS std::ios::sync_with_stdio(0); cin.tie(0); cout.tie(0)
#define INF 0x3f3f3f3f
#define LLF 0x3f3f3f3f3f3f3f3f
#define f first
#define s second
#define endl '\n'
using namespace std;
const int N = 2e6 + 10, mod = 1e9 + 7;
const int maxn = 500010;
const long double eps = 1e-5;
const int EPS = 500 * 500;
typedef long long ll;
typedef unsigned long long ull;
typedef pair<int,int> PII;
typedef pair<ll,ll> PLL;
typedef pair<double,double> PDD;
template<typename T> void read(T &x) {x = 0;char ch = getchar();ll f = 1;while(!isdigit(ch)){if(ch == '-')f*=-1;ch=getchar();}while(isdigit(ch)){x = x*10+ch-48;ch=getchar();}x*=f;
}
template<typename T, typename... Args> void read(T &first, Args& ... args) {read(first);read(args...);
}
int cnt;
int ans[N];
bool vis[N];
vector<int> G[N][10], q[N];
int main() {int n, m;read(n,m);cnt = n;for(int i = 1; i <= m; ++ i) {int u, v;read(u,v);int tmp = i, pre = v;while (tmp>9) {G[++cnt][tmp%10].push_back(pre);tmp/=10;pre=cnt;}G[u][tmp].push_back(pre);tmp = i, pre = u;while(tmp>9) {G[++cnt][tmp%10].push_back(pre);tmp/=10;pre=cnt;}G[v][tmp].push_back(pre);}int T;q[++T].push_back(1);vis[1] = 1;for(int i = 1; i <= T; ++ i) {for(int j = 0; j <= 9; ++ j) {//优先走数字小的bool flag = 0;for(auto it : q[i])//对于同一个i,Q[i]中的点的ans都是一样的for(auto v : G[it][j]) {//走过就不用再走了if(vis[v]) continue;vis[v] = flag = 1;q[T+1].push_back(v);ans[v] = (10ll*ans[it]+j) % mod;//更新答案}if(flag) T++;}}for(int i = 2; i <= n; ++ i) cout << ans[i] << endl;
}

图论 ---- CF1209F. Koala and Notebook(多位数字拆边+BFS)相关推荐

  1. CF-1209 F. Koala and Notebook(建图BFS)

    CF-1209 F. Koala and Notebook(建图BFS) 题目链接 题意 n个城市m个双向边,从点1可以到达任何点,把点1到到其他点所经过的边写成一行可以得到一个大数,你的任务使得这个 ...

  2. Python 多位数字写入CSV文件,避免科学计数法显示,超长数字,超大数字,精度保留

    问题:多位数字直接写入CSV文件后,发现以下问题 1.数字位数过多,excel打开显示科学计数法 2.即使excel单元格格式为数字,发现最后几位被四舍五入,精度丢失 解决思路: 解决办法:数字改成字 ...

  3. 四位数码管显示多位数字计时

    目录 前言 一.共阳极四位数码管 二.显示数字 1.显示单个数字 2.显示多位数字 总结 前言 共阳极四位数码管显示0-9单个数字的话只需要控制对应的引脚电平就行,但如果需要显示多位数字的话,不仅需要 ...

  4. 利用word中的域进行多位数字自动编号

    一. 应用场景: 在撰写专利说明书或其它应用场景下,需要用到大量如下图所示的多位数字编号,word2019工具栏中的定义新编号不能进行四位或更高位数字的自动编号,而域功能可以解决这个问题. 二.域代码 ...

  5. 图论算法(5):图的广度优先遍历 BFS

    本章节内容使用 java 实现,Github 代码仓:https://github.com/ZhekaiLi/Code/tree/main/Graph/src 查看文章内的图片可能需要科学上网! 因为 ...

  6. Java多位数字强可读性写法(数字中间添加下划线分开)

    注意:这个写法需要jdk>= 1.7 多位数字,可以在数字中间田间下划线,以增加可读性 /*** 多位数可以用下划线隔开*/@Testpublic void test5(){int i = 10 ...

  7. 1209F - Koala and Notebook

    这场比赛没打,看同学fst了,于是来看看. 这道题看似简单,但是没想清楚细节真的不太行.像现在熬到十一点左右,脑子真的不行. 首先显然位数越小越好,因为每一位要比较,不如拆点.此时要拆成两条有向链(开 ...

  8. 表格数字乘以百分比怎么算_Excel输入多位数字之后有了“E”,用文本格式一步到位,恢复原状...

    1. 日期:日期格式将日期系列数值显示为日期值.以星号(*)开头的日期格式响应操作系统特定的区域日期和时间设置的更改.不带星号的格式不受系统操作设置的影响. 解析: (1) 输入日期之后,单元格会自动 ...

  9. 基于谷歌街景多位数字识别技术:TensorFlow的车牌号识别系统

    向AI转型的程序员都关注了这个号

最新文章

  1. java多线程消息队列_java多线程消息队列的实现
  2. python类中方法相互调用_python 类中方法之间的调用
  3. 架构师需要懂的环境配置标准化
  4. Javascript函数调用的四种方法
  5. OpenGL简介+一个简单的程序
  6. python中的类的属性是什么_python中类属性和数据属性的解释
  7. 【金融申请评分卡】数据准备 - 造衍生变量
  8. “万”字谏言,给那些想学Python的人,建议收藏后细看!
  9. 从零开始学做微信小程序,看这些就够了!
  10. GloVe损失函数的理解
  11. python关闭线程池_python线程池
  12. 集丰照明|LED 的产业链由哪些部分构成?
  13. 国际贸易术语解释通则(DDU 未完税交货(……指定目的港))
  14. 一文教你快速学习搭建属于自己的数据指标体系
  15. 利用VSCode集成并连接远程Linux服务器上的Docker
  16. Springboot高考志愿填报信息管理系统毕业设计-附源码
  17. mpu6500-gnss组合导航代码分析
  18. 研发团队如何借助Gitlab来做代码review
  19. 【Vue】 favicon.ico:1 GET http://127.0.0.1:5500/favicon.ico 404 (Not Found)
  20. html中标签必须嵌套于head标签中,网页设计与制作测试题

热门文章

  1. 本地应用 v-model
  2. 通俗易懂理解~图机器学习导论
  3. OpenVINO + OpenCV实现点头与摇头识别验证
  4. Batch Normalization应该放在ReLU非线性激活层的前面还是后面?
  5. 基于OpenCV的实用图像处理操作
  6. 【ASP.NET Core】ASP.NET Core 依赖注入
  7. 系统升级到10.13之后cocoapods安装失败问题解决办法
  8. laravel中Crypt加密方法
  9. 《设计模式 系列》- 面向对象六大原则
  10. php设计模式 - 建造者模式