博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
[CF845G]Shortest Path Problem?
阅读量:6668 次
发布时间:2019-06-25

本文共 1054 字,大约阅读时间需要 3 分钟。

题目大意:同,只是把最大值变成了最小值

题解:

卡点:

 

C++ Code:

#include 
#define maxn 100010#define maxm 100010int head[maxn], cnt;struct Edge { int to, nxt; long long w;} e[maxm << 1];void addE(int a, int b, long long c) { e[++cnt] = (Edge) {b, head[a], c}; head[a] = cnt;} long long p[64];inline void add(long long x) { for (int i = 62; ~i; i--) if (x & 1ll << i) { if (p[i]) x ^= p[i]; else {p[i] = x; break;} }}inline long long ask(long long x) { long long ans = x; for (int i = 62; ~i; i--) if (ans > (ans ^ p[i])) ans = ans ^ p[i]; return ans;} long long d[maxn];bool vis[maxn];void dfs(int rt, long long now) { d[rt] = now; vis[rt] = true; for (int i = head[rt]; i; i = e[i].nxt) { int v = e[i].to; if (!vis[v]) dfs(v, d[rt] ^ e[i].w); else add(d[rt] ^ d[v] ^ e[i].w); }}int n, m;int main() { scanf("%d%d", &n, &m); for (int i = 0; i < m; i++) { int a, b; long long c; scanf("%d%d%lld", &a, &b, &c); addE(a, b, c); addE(b, a, c); } dfs(1, 0); printf("%lld\n", ask(d[n])); return 0;}

  

转载于:https://www.cnblogs.com/Memory-of-winter/p/9777719.html

你可能感兴趣的文章
给 Android 初学者的 Gradle 知识普及
查看>>
分模块开发创建Action子模块——(九)
查看>>
基于Nginx实现一个自己的HTTP模块
查看>>
LeetCode(34)-Palindrome Number
查看>>
阅读《Android 从入门到精通》(24)——切换图片
查看>>
SimpleDateFormat线程不安全及解决的方法
查看>>
Unity---------Mesh理解
查看>>
hdu 1728 逃离迷宫 bfs记转向
查看>>
一分钟学会 ConstraintLayout 之从属性角度理解布局
查看>>
线程 Timer TimerTask 计时器 定时任务 MD
查看>>
[js高手之路]原型式继承与寄生式继承
查看>>
MBR分区操作-增加、扩展、删除
查看>>
geoserver使用curl发布 imagemosaic(转载)
查看>>
RabbitMQ 参数们的Power “续”
查看>>
windows 显示桌面.scf
查看>>
git 忽略文件
查看>>
layui 数据表格 根据值(1=业务,2=机构)显示中文名称
查看>>
【Django】pip 安装和卸载 Django
查看>>
Go语言基础:method
查看>>
[详细实例]MicroPython拼插编程实战:DIY一台会思考的壁障车
查看>>