Codeforces 1149D 最短路 状压DP
题意及思路:https://blog.csdn.net/yzyyylx/article/details/90145400
这题主要巧妙在分析了最短路算法的性质,得出大小小于等于3的连通块一定不会被再次访问的结论。
代码:
#include <bits/stdc++.h>
using namespace std;
bool v[80][1 << 18];
int dp[80][1 << 18];
const int maxn = 1010;
struct node {
int dis, state, now;
bool operator < (const node& rhs) const {
return dis > rhs.dis;
}
};
struct Edge {
int v, w;
};
vector<Edge> G[maxn];
int sz[maxn], num[maxn], ans[maxn];
int A, B, n, m, tot;
void add(int x, int y, int z) {
G[x].push_back((Edge){y, z});
G[y].push_back((Edge){x, z});
}
priority_queue<node> q;
int f[maxn];
int get(int x) {
if(x == f[x]) return x;
return f[x] = get(f[x]);
}
void merge(int x, int y) {
int x1 = get(x), y1 = get(y);
if(x1 == y1) return;
f[x1] = y1;
sz[y1] += sz[x1];
}
int get_num(int x) {
if(sz[get(x)] > 3)
return 1 << num[get(x)];
else
return 0;
}
void dijkstra() {
memset(dp, 0x3f, sizeof(dp));
memset(ans, 0x3f, sizeof(ans));
q.push((node){0, get_num(1), 1});
dp[1][get_num(1)] = 0;
while(!q.empty()) {
node tmp = q.top();
q.pop();
if(v[tmp.now][tmp.state]) continue;
v[tmp.now][tmp.state] = 1;
ans[tmp.now] = min(ans[tmp.now], tmp.dis);
for (auto x : G[tmp.now]) {
if(x.w == B && get(x.v) == get(tmp.now)) continue;
if(x.w == B && (tmp.state & get_num(x.v))!= 0) continue;
if(x.w + tmp.dis < dp[x.v][get_num(x.v) | tmp.state]) {
dp[x.v][get_num(x.v) | tmp.state] = x.w + tmp.dis;
q.push((node){dp[x.v][get_num(x.v) | tmp.state], get_num(x.v) | tmp.state, x.v});
}
}
}
}
int main() {
int x, y, z;
scanf("%d%d%d%d", &n, &m, &A, &B);
for (int i = 1; i <= n; i++) {
f[i] = i;
sz[i] = 1;
}
for (int i = 1; i <= m; i++) {
scanf("%d%d%d", &x, &y, &z);
add(x, y, z);
if(z == A) {
merge(x, y);
}
}
for (int i = 1; i <= n; i++) {
if(i == get(i) && sz[i] > 3) {
num[i] = tot++;
}
}
dijkstra();
for (int i = 1; i <= n; i++)
printf("%d ", ans[i]);
}
Codeforces 1149D 最短路 状压DP的更多相关文章
- codeforces Diagrams & Tableaux1 (状压DP)
http://codeforces.com/gym/100405 D题 题在pdf里 codeforces.com/gym/100405/attachments/download/2331/20132 ...
- HDU 4568 Hunter 最短路+状压DP
题意:给一个n*m的格子,格子中有一些数,如果是正整数则为到此格子的花费,如果为-1表示此格子不可到,现在给k个宝藏的地点(k<=13),求一个人从边界外一点进入整个棋盘,然后拿走所有能拿走的宝 ...
- codeforces 21D. Traveling Graph 状压dp
题目链接 题目大意: 给一个无向图, n个点m条边, 每条边有权值, 问你从1出发, 每条边至少走一次, 最终回到点1. 所走的距离最短是多少. 如果这个图是一个欧拉回路, 即所有点的度数为偶数. 那 ...
- 最短路+状压DP【洛谷P3489】 [POI2009]WIE-Hexer
P3489 [POI2009]WIE-Hexer 大陆上有n个村庄,m条双向道路,p种怪物,k个铁匠,每个铁匠会居住在一个村庄里,你到了那个村庄后可以让他给你打造剑,每个铁匠打造的剑都可以对付一些特定 ...
- 【BZOJ1097】[POI2007]旅游景点atr 最短路+状压DP
[BZOJ1097][POI2007]旅游景点atr Description FGD想从成都去上海旅游.在旅途中他希望经过一些城市并在那里欣赏风景,品尝风味小吃或者做其他的有趣的事情.经过这些城市的顺 ...
- HDU3247 Resource Archiver —— AC自动机 + BFS最短路 + 状压DP
题目链接:https://vjudge.net/problem/HDU-3247 Resource Archiver Time Limit: 20000/10000 MS (Java/Others) ...
- hdu3247Resource Archiver (AC自动机+最短路+状压dp)
Time Limit: 20000/10000 MS (Java/Others) Memory Limit: 100000/100000 K (Java/Others) Total Submis ...
- Codeforces 917C - Pollywog(状压 dp+矩阵优化)
UPD 2021.4.9:修了个 typo,为啥写题解老出现 typo 啊( Codeforces 题目传送门 & 洛谷题目传送门 这是一道 *2900 的 D1C,不过还是被我想出来了 u1 ...
- Codeforces 79D - Password(状压 dp+差分转化)
Codeforces 题目传送门 & 洛谷题目传送门 一个远古场的 *2800,在现在看来大概 *2600 左右罢( 不过我写这篇题解的原因大概是因为这题教会了我一个套路罢( 首先注意到每次翻 ...
随机推荐
- JS设置首字母大写算法
返回一个字符串,确保字符串的每个单词首字母都大写,其余部分小写. 像'the'和'of'这样的连接符同理. function titleCase(str) { //把字符串所有的字母变为小写,并根据空 ...
- mysql -- mysql基于ssl的主从复制
mysql基于ssl的主从复制由于mysql在复制过程中是明文的,所以就大大降低了安全性,因此需要借助于ssl加密来增加其复制的安全性. 主服务器node1:172.16.200.1从服务器node2 ...
- Spring高频率面试题
1.Spring怎样定义类的作用域 通过bean 定义中的scope属性来定义. 2.Spring支持的几种bean的作用域 支持以下五种bean的作用域: singleton : bean在每个Sp ...
- python bezier 曲线
1.手写bezier公式,生成bezier代码, 如果给的点数过多,则会生成一半bezier曲线,剩下的一半就需要进行拼接: import numpy as np import matplotlib. ...
- 【串线篇】idea下的springboot入门配置
1.Spring Boot 简介 简化Spring应用开发的一个框架: 整个Spring技术栈的一个大整合: J2EE开发的一站式解决方案: 2.微服务 2014,martin fowler 微服务: ...
- C盘Administrator中 .m2/repository里面是什么
${user.home}/.m2/repository文件夹是maven默认的本地仓库地址maven仓库分为远程仓库和本地仓库,当你在pom里配置依赖项目后,maven首先会从本地仓库查找该项目,如果 ...
- vue.js 分页
<template> <div class="index"> <el-pagination background :hide-on-single-pa ...
- 自己总结的CSS3中transform变换、transition过渡、animation动画的基本用法
<!DOCTYPE html> <html lang="en"> <head> <meta charset="utf-8&quo ...
- Linux下dd和od命令备份查看硬盘mbr,并用vim修改!
主引导记录(Master Boot Record,MBR),位于一个硬盘的0柱面.0盘面.1扇区,共512字节.具体划分依次为:引导代码区440字节.磁盘签名4字节.空白(Ox0000)2字节.MBR ...
- (转)Maven中的库(repository)详解 ---repository配置查找构件(如.jar)的远程库
转:https://blog.csdn.net/taiyangdao/article/details/52287856 Maven中的库(repository)是构件(artifact)的集合.构件以 ...