GDOI2014模拟 旅行【SPFA】
旅行(travel)
从前有一位旅者,他想要游遍天下所有的景点。这一天他来到了一个神奇的王国:在这片土地上,有n个城市,从1到n进行编号。王国中有m条道路,第i条道路连接着两个城市ai,bi,由于年代久远,所有的道路都已经不能使用。如果要修复第i条道路,需要wi的时间。为了更好的旅行,旅者想要将某些道路修复,使得1号城市能够到达n号城市,2号城市能够到达n-1号城市..k号城市能够到达n-k+1号城市。为了满足他的要求,请问最少需要多少时间去修复道路。无解请输出-1。
输入格式:
第一行:n,m,k
接下来m行:ai,bi,wi
含义如上所述。
输出格式:
输出共一行:最少需要多少时间修复道路。如果始终无法满足旅者的要求,请输出-1。
样例输入:
5 5 2 1 3 4 3 5 2 2 3 1 3 4 4 2 4 3
样例输出:
9
数据范围:
20%的数据满足:k <= 2, n<= 10, m <= 20
40%的数据满足:k <= 3, n<=100, m<=1000
70%的数据满足:k<=4, n<=1000, m<=1000
100%的数据满足:k<=4, n<=10000, m<=10000, n >= 2*k, wi <= 1000, 1 <= ai, bi <= n
时间限制:
3000
#include<iostream>
#include<queue>
#include<cstdio>
#include<cstring>
using namespace std;
;
struct node{
int from,to,next,dis,bro;
}edge[N*];
,dis[N],ans=,last[N];
],in[N],can=true;
inline void unite(int x,int y,int w,int b)
{
edge[s].from=x;
edge[s].bro=b;
edge[s].to=y;
edge[s].dis=w;
edge[s].next=head[x];
head[x]=s;
return;
}
inline ;return;}
inline void dfs(int step,int res)
{
if(step==k)
{
ans=min(ans,res);
return;
}
if(!can) return;
node store[N*];
;i<=s;i++) store[i]=edge[i];
;
;u<=k;u++) )
{
used[u]=;
) ;i<=s;i++) edge[i]=store[i];
;
queue<int> Q;
memset(dis,,sizeof(dis));
memset(last,,sizeof(last));
];
dis[u]=;
Q.push(u);
while(!Q.empty())
{
int f=Q.front();
Q.pop();
;
for(int i=head[f];i;i=edge[i].next) if(edge[i].dis+dis[f]<dis[edge[i].to])
{
dis[edge[i].to]=edge[i].dis+dis[f];
last[edge[i].to]=i;
if(!in[edge[i].to])
{
Q.push(edge[i].to);
;
}
}
}
]) can=;
else
{
;
)
{
del(last[p]);
del(edge[last[p]].bro);
p=edge[last[p]].from;
}
dfs(step+,res+dis[n-u+]);
}
used[u]=;
}
return;
}
int main()
{
int x,y,w;
scanf("%d%d%d",&n,&m,&k);
;i<=m;i++)
{
scanf("%d%d%d",&x,&y,&w);
s++;unite(x,y,w,s+);
s++;unite(y,x,w,s-);
}
memset(used,,sizeof(used));
dfs(,);
if(!can) printf("-1\n");
else printf("%d\n",ans);
;
}
GDOI2014模拟 旅行【SPFA】的更多相关文章
- 【JZOJ6419】模拟旅行&【BZOJ5506】【luoguP5304】旅行者
description 某国有n座城市,这些城市之间通过m条单向道路相连,已知每条道路的长度. 不过,小X只对其中k座城市感兴趣. 为了更好地规划模拟旅行路线,提升模拟旅行的体验,小X想要知道他感兴趣 ...
- 【GDOI2014模拟】JZOJ2020年8月14日提高组 服务器
[GDOI2014模拟]JZOJ2020年8月14日提高组 服务器 题目 Time and Memory Limits Description 我们需要将一个文件复制到n个服务器上,这些服务器的编号为 ...
- 【GDOI2014模拟】JZOJ2020年8月14日T2 网格
[GDOI2014模拟]JZOJ2020年8月14日T2 网格 题目 Time and Memory Limits Description 某城市的街道呈网格状,左下角坐标为A(0, 0),右上角坐标 ...
- [JZOJ3400] 【GDOI2014模拟】旅行
题目 题目大意 给你一个图,让你选择权值和最小的边,使得\(1\)和\(n\),\(2\)和\(n-1\),--,\(K\)和\(n-K+1\)联通. \(K\leq 4\) 思考历程 一看到这题就觉 ...
- All Roads Lead to Rome(30)(MAP【int,string】,邻接表,DFS,模拟,SPFA)(PAT甲级)
#include<bits/stdc++.h>using namespace std;map<string,int>city;map<int,string>rcit ...
- GDOI2014模拟pty爬山(mountain)
pty爬山(mountain) 在Pty学校附近,有一座名之为岳之麓的高山.Pty很喜欢和(哔--)一起爬山.山的平面模型如下:山由一个顶点集:A1,A2-An给定,保证Ai的x单调递增.我们将Ai和 ...
- 【GDOI2014模拟】服务器
前言 直到比赛最后几分钟,才发现60%数据居然是一个水dp,结果没打完. 题目 我们需要将一个文件复制到n个服务器上,这些服务器的编号为S1, S2, -, Sn. 首先,我们可以选择一些服务器,直接 ...
- 【GDOI2014模拟】Tree
题目 Wayne 在玩儿一个很有趣的游戏.在游戏中,Wayne 建造了N 个城市,现在他想在这些城市间修一些公路,当然并不是任意两个城市间都能修,为了道路系统的美观,一共只有M 对城市间能修公路,即有 ...
- 【GDOI2014模拟】网格
题目 某城市的街道呈网格状,左下角坐标为A(0, 0),右上角坐标为B(n, m),其中n >= m.现在从A(0, 0)点出发,只能沿着街道向正右方或者正上方行走,且不能经过图示中直线左上方的 ...
随机推荐
- Docker网络代理设置
背景 在一些实验室环境,服务器没有直接连接外网的权限,需要通过网络代理.我们通常会将网络代理直接配置在/etc/environment./etc/profile之类的配置文件中,这对于大部分操作都是可 ...
- [Flume] - flume安装
Apache Flume是一个分布式的.可靠的.高效的系统,可以将不同来源的数据收集.聚合并移动到集中的数据存储中心上.Apache Flume不仅仅只是用到日志收集中.由于数据来源是可以定制的,fl ...
- zhenai
1.2=http://files.cnblogs.com/files/bqh10086/zhenai_1.2_pack.zip
- CSS下拉菜单
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/stri ...
- 怎么用php语言来做文件缓存
使用缓存能够让我们的程序访问起来更加快速,缓存可以减少对数据库的操作,体验起来更好一些,对服务器的压力也小一些,当然服务速度很快 php文件执行完之后产生的解析完的数据,保存成静态的网页,下次打开的这 ...
- 【2017-03-12】SQL Sever 子查询、聚合函数
一.子查询 子查询:把一条查询语句,当做值来使用子句的查询结果必须是一列子句可以返回多行数据,但必须是一列 子句返回的值为一个值的时候: 例如: 我只知道c026这个编号,我要查询比这个车价格低的全部 ...
- 2429: [HAOI2006]聪明的猴子
2429: [HAOI2006]聪明的猴子 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 448 Solved: 309[Submit][Statu ...
- 剑指offer_(17)
题目描述 输入两棵二叉树A,B,判断B是不是A的子结构.(ps:我们约定空树不是任意一个树的子结构) public class Solution17 { /*思路:参考剑指offer 1.首先设置标志 ...
- SEO-长尾词与分词技术
长尾关键词与分词技术 长尾关键词:网站非目标关键词,能给网站带来流量的关键词. 例如:主关键词是成都网站建设 那么,跟成都网站建设相关的词,就叫做长尾关键词. 比如:成都网站建设哪里好?成都网 ...
- fopen中的mode(20161115)
mode mode 参数指定了所要求到该流的访问类型.可以是以下: fopen() 中 mode 的可能值列表 mode 说明 'r' 只读方式打开,将文件指针指向文件头. 'r+' 读写方式打开,将 ...