题意及思路: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的更多相关文章

  1. codeforces Diagrams & Tableaux1 (状压DP)

    http://codeforces.com/gym/100405 D题 题在pdf里 codeforces.com/gym/100405/attachments/download/2331/20132 ...

  2. HDU 4568 Hunter 最短路+状压DP

    题意:给一个n*m的格子,格子中有一些数,如果是正整数则为到此格子的花费,如果为-1表示此格子不可到,现在给k个宝藏的地点(k<=13),求一个人从边界外一点进入整个棋盘,然后拿走所有能拿走的宝 ...

  3. codeforces 21D. Traveling Graph 状压dp

    题目链接 题目大意: 给一个无向图, n个点m条边, 每条边有权值, 问你从1出发, 每条边至少走一次, 最终回到点1. 所走的距离最短是多少. 如果这个图是一个欧拉回路, 即所有点的度数为偶数. 那 ...

  4. 最短路+状压DP【洛谷P3489】 [POI2009]WIE-Hexer

    P3489 [POI2009]WIE-Hexer 大陆上有n个村庄,m条双向道路,p种怪物,k个铁匠,每个铁匠会居住在一个村庄里,你到了那个村庄后可以让他给你打造剑,每个铁匠打造的剑都可以对付一些特定 ...

  5. 【BZOJ1097】[POI2007]旅游景点atr 最短路+状压DP

    [BZOJ1097][POI2007]旅游景点atr Description FGD想从成都去上海旅游.在旅途中他希望经过一些城市并在那里欣赏风景,品尝风味小吃或者做其他的有趣的事情.经过这些城市的顺 ...

  6. HDU3247 Resource Archiver —— AC自动机 + BFS最短路 + 状压DP

    题目链接:https://vjudge.net/problem/HDU-3247 Resource Archiver Time Limit: 20000/10000 MS (Java/Others)  ...

  7. hdu3247Resource Archiver (AC自动机+最短路+状压dp)

    Time Limit: 20000/10000 MS (Java/Others)    Memory Limit: 100000/100000 K (Java/Others) Total Submis ...

  8. Codeforces 917C - Pollywog(状压 dp+矩阵优化)

    UPD 2021.4.9:修了个 typo,为啥写题解老出现 typo 啊( Codeforces 题目传送门 & 洛谷题目传送门 这是一道 *2900 的 D1C,不过还是被我想出来了 u1 ...

  9. Codeforces 79D - Password(状压 dp+差分转化)

    Codeforces 题目传送门 & 洛谷题目传送门 一个远古场的 *2800,在现在看来大概 *2600 左右罢( 不过我写这篇题解的原因大概是因为这题教会了我一个套路罢( 首先注意到每次翻 ...

随机推荐

  1. WPF 基本图形

    一.WPF的基本图形 WPF图形的基类是Shape,所有的wpf图形类都是继承于Shape.Height,Width等决定它所处的面积,位置等,在没有设置图形宽高的情况,坐标位置为所在的容器的坐标,设 ...

  2. win10 + VS2015 编译 ARPACK

    step 1: 下载ARPACK , mingw-w64-install 和 mingw-get-inst-20120426.exe: step 2: 安装 MinGW-64默认安装路径即可. ste ...

  3. PHP上传文件和下载

    PHP 中文件上传的基础知识: 1)客户端 form 表单设置 必须设置的 form 表单项: <!DOCTYPE html> <html> <head> < ...

  4. testNG之参数化测试

    @Parameters 测试的时候,测试的数据可以放在testng.xml文件中,被测试的方法通过@Parameters注解传递到测试方法中 parameterizedTest.java import ...

  5. ruby puts语法

    str = "Welcom to china" str1 = str puts str + " 1" puts str1 + " 1" de ...

  6. WebView中shouldOverrideUrlLoading和onPageStarted方法的区别

    WebView中的shouldOverrideUrlLoading和onPageStarted这两个方法就是可以捕获到跳转的url,然后进行一系列的操作,但是他们两到底有什么区别呢? 当点击页面中的链 ...

  7. delphi 将Dll等生成资源文件

    资源文件一般为扩展名为res的文件,其自带的资源编译工具BRCC32.EXE(位于/Delphi/BIN目录下) 1.编写rc脚本文本用记事本或其它文本编辑器编写一个扩展名为rc的文件,格式分别为在资 ...

  8. GO 学习资源收集

     golang图书,在线阅读Go轻松学https://www.golang123.com/book/16 Go示例学https://www.golang123.com/book/17 Go Web 编 ...

  9. jmeter之-非GUI模式&登录实战

    1.执行测试脚本 jmeter -n -t JMeter分布式测试示例.jmx 2.指定结果文件及日志路径 jmeter -n -t JMeter分布式测试示例.jmx -l report\01-re ...

  10. Jquery 实现回车键触发功能

    keyup,上抬键盘 .$(function(){ 方法一: $(document).keyup(function(event){ if(event.keyCode ==13){ alert(&quo ...