题意:

      给你一个无向图,和一些必须经过的点,问你从起点出发,到达所有必须经过的点再回来的最小总路径.

思路:

      因为必须经过的点的数量很小,小于等于10,全排列是 10! = 3628800 所以以每个必须经过的点为起点跑最短路,记录数值,然后全排列,枚举经过顺序,取得最小就行了..


#include<stdio.h>
#include<string.h>
#include<queue>
#include<algorithm> #define N_node (100000 + 500)
#define N_edge (200000 + 1000)
#define INF 1000000000

using namespace
std; typedef struct
{
int
to ,next ,cost;
}
STAR; STAR E[N_edge];
int
list[N_node] ,tot;
int
s_x[N_node];
int
s_x2[12][N_node];
int
mk_node[12];
int
hash[N_node]; void add(int a ,int b ,int c)
{

E[++tot].to = b;
E[tot].cost = c;
E[tot].next = list[a];
list[a] = tot;
} void
SPFA(int s ,int n)
{ int
mark[N_node] = {0};
for(int
i = 0 ;i <= n ;i ++)
s_x[i] = INF;
mark[s] = 1;
s_x[s] = 0;
queue<int>q;
q.push(s);
while(!
q.empty())
{
int
xin ,tou;
tou = q.front();
q.pop();
mark[tou] = 0;
for(int
k = list[tou] ;k ;k = E[k].next)
{

xin = E[k].to;
if(
s_x[xin] > s_x[tou] + E[k].cost)
{

s_x[xin] = s_x[tou] + E[k].cost;
if(!
mark[xin])
{

mark[xin] = 1;
q.push(xin);
}
}
}
}
return ;
} int main ()
{
int
t ,n ,m ,i;
int
a ,b ,c ,s;
scanf("%d" ,&t);
while(
t--)
{

scanf("%d %d" ,&n ,&m);
memset(list ,0 ,sizeof(list));
tot = 1;
for(
i = 1 ;i <= m ;i ++)
{

scanf("%d %d %d" ,&a ,&b ,&c);
a++ ,b++;
add(a ,b ,c) ,add(b ,a ,c);
}

scanf("%d" ,&s);
for(
i = 1 ;i <= s ;i ++)
{

scanf("%d" ,&mk_node[i]);
mk_node[i]++;
hash[mk_node[i]] = i;
}

mk_node[0] = 1;
for(
i = 0 ;i <= s ;i ++)
{

SPFA(mk_node[i] ,n);
for(int
j = 1 ;j <= n ;j ++)
s_x2[i][j] = s_x[j];
} int
max = 1;
for(
i = 1 ;i <= s ;i ++)
max *= i;
int
ans_min = INF;
while(
max --)
{
int
tmp = s_x2[0][mk_node[1]] + s_x2[hash[mk_node[s]]][1];
for(
i = 2 ;i <= s ;i ++)
tmp += s_x2[hash[mk_node[i-1]]][mk_node[i]];
if(
ans_min > tmp) ans_min = tmp;
next_permutation(mk_node + 1 ,mk_node + s + 1);
}

printf("%d\n" ,ans_min);
}
return
0;
}

hdu3768 spfa+全排列的更多相关文章

  1. Shopping(SPFA+DFS HDU3768)

    Shopping Time Limit: 10000/5000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Sub ...

  2. PHP实现全排列(递归算法)

    算法描述:如果用P表示n个元素的全排列,而Pi表示n个元素中不包含元素i的全排列,(i)Pi表示在排列Pi前面加上前缀i的排列,那么n个元素的全排列可递归定义为:    ① 如果n=1,则排列P只有一 ...

  3. hdu5651 xiaoxin juju needs help (多重集的全排列+逆元)

    xiaoxin juju needs help 题意:给你一个字符串,求打乱字符后,有多少种回文串.                      (题于文末) 知识点: n个元素,其中a1,a2,··· ...

  4. [LeetCode] Palindrome Permutation II 回文全排列之二

    Given a string s, return all the palindromic permutations (without duplicates) of it. Return an empt ...

  5. [LeetCode] Palindrome Permutation 回文全排列

    Given a string, determine if a permutation of the string could form a palindrome. For example," ...

  6. [LeetCode] Permutations II 全排列之二

    Given a collection of numbers that might contain duplicates, return all possible unique permutations ...

  7. [LeetCode] Permutations 全排列

    Given a collection of numbers, return all possible permutations. For example,[1,2,3] have the follow ...

  8. 【BZOJ-3627】路径规划 分层图 + Dijkstra + spfa

    3627: [JLOI2014]路径规划 Time Limit: 30 Sec  Memory Limit: 128 MBSubmit: 186  Solved: 70[Submit][Status] ...

  9. POJ 2387 Til the Cows Come Home(最短路 Dijkstra/spfa)

    传送门 Til the Cows Come Home Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 46727   Acce ...

随机推荐

  1. pytorch(06)autograd与逻辑回归

    autograd与逻辑回归 自动求导系统中两个常用的方法: torch.autograd.backward and torch.autograd.grad 演示理解一阶导数.二阶导数的求导过程 理解自 ...

  2. PTA甲级—数学

    1.简单数学 1008 Elevator (20分) 模拟题 #include <cstdio> #include <cstring> #include <string& ...

  3. 如何在 Istio 中支持 Dubbo、Thrift、Redis 以及任何七层协议?

    赵化冰,腾讯云高级工程师,Istio Member,ServiceMesher管理委员,Istio 项目贡献者, Aerika 项目创建者 ,热衷于开源.网络和云计算.目前主要从事服务网格的开源和研发 ...

  4. 树莓派4刷FreeBSD

    树莓派4可以刷FreeBSD了.需要替换boot文件.​加群获得文件QQ交流群817507910.

  5. 记一次jstack命令定位问题

    今天天气不错,但是赶上恶意加班心情就不爽,怀着不爽的心情干活,总能创造出更多的问题,这不,今天就自己挖了一个坑,自己跳进去了,好在上来了 经过是这样的,开始调试canal采集binlog时,由于添加了 ...

  6. python基础学习之列表的功能方法

    列表:list 格式 li = [1,2,3,4,5,6] 列表内部随意嵌套其他格式:字符串.列表.数字.元组.字典. 列表内部有序,且内容可更改 a = [1,2,3,4]    a[0] = 5  ...

  7. 得分(JAVA语言)

    package 第三章习题; /*  * 给出一个由O和X组成的串(长度为1~80),统计得分.  * 每个O得分为目前连续出现的O的个数,X得分为0.  * 例如,OOXXOXXOOO的得分为  * ...

  8. OpenGL 绘制你的 github skyline 模型

    前言 好久没更新博客了,上一篇文章还是在去年6月份,乍一看居然快要过去一年了,不时还能看到粉丝数和排名在涨,可是却一直没有内容更新,怪不好意思的- -(主要是一直没想好要写些什么,中间也有过一些想法, ...

  9. 图解 | 原来这就是 IO 多路复用

    为了讲多路复用,当然还是要跟风,采用鞭尸的思路,先讲讲传统的网络 IO 的弊端,用拉踩的方式捧起多路复用 IO 的优势. 为了方便理解,以下所有代码都是伪代码,知道其表达的意思即可. Let's go ...

  10. 面向前端开发人员的VSCode自动化插件

    转载请注明出处:葡萄城官网,葡萄城为开发者提供专业的开发工具.解决方案和服务,赋能开发者. 原文参考:https://blog.bitsrc.io/vscode-automations-for-fro ...