基里巴斯(path)
基里巴斯(path)
题目描述
最近,帕特里克沉迷于世界地图上的太平洋地区。他发现了一个名字奇异的岛国:基里巴斯共和国,简称基里巴斯,是一个太平洋岛国。
其由33个岛屿组成。
“可惜它快被淹没了,该死的全球变暖”。
真悲哀。
我们这里讨论其在四维平行宇宙中的另一个国家:巴里基斯。这个国家由NN个岛屿或岛礁组成。
由于岛屿众多,政府在所有的岛屿之间均设有固定的经济航线连接。对于编号为u,v的岛屿(u,v)对,连接两岛的单向航线通行费用是(u⊕v)×K。其中,⊕表示异或(Xor)。
泛美航空公司开设了MM条往返于各岛的单向航线,每条航线均有一个固定的通行费用以期以更低的价格占有更多的用户群。
另外,泛美打算在岛礁中心建设了一个机场作为中转枢纽,这个枢纽建成后或许能大大降低泛美的航空成本。但是作为邪恶的资本主义财团,董事长还是希望调研一下收益。
于是,他打算从SS飞到城市TT。他希望得知从SS到城市TT的最小费用。
输入
输入第一行包含三个整数N,M,K,含义如题所示。
接下来MM行,每行三个整数ui,vi,wi描述一条单向航线。
最后一行两个整数S,T,表示想要调研的起点和终点。
输出
输出包含一个整数,为从SS到城市TT的最小费用。
样例输入
【样例1输入】
5 3 3
1 3 2
2 4 4
2 3 2
1 5
【样例2输入】
1000 1 85
829 630 1
633 492
样例输出
【样例1输出】
12
【样例2输出】
77945
提示
对于所有测试数据,保证:1≤K≤103,1≤wi≤105,1≤ui,vi≤n1≤K≤103,1≤wi≤105,1≤ui,vi≤n
详细部分分见下表:
测试点 |
N |
M |
1 |
≤105≤105 |
=0 |
2 |
=1 |
|
3 |
=2 |
|
4 |
=3 |
|
5 |
=10 |
|
6-7 |
≤103≤103 |
|
8-10 |
≤103≤103 |
|
11-20 |
≤2×105≤2×105 |
≤106≤106 |
数据不保证无重边。
来源
lhy
solution
对于点i
把每一位分离出来
若i的着一位为0 则lj(i,i+(1<<j))
若为1 则lj(i,i-(1<<j))
这样就能走遍所有点,边数nlogn+m
这题卡spfa。。。
很久没写dijkstra,忘光
#include<cstdio>
#include<iostream>
#include<cstdlib>
#include<cstring>
#include<algorithm>
#include<cmath>
#include<queue>
#define maxn 200005
#define inf 1e9
using namespace std;
int n,m,K,tot,t1,t2,t3,head[maxn],S,T;
int d[maxn];
struct node{
int v,nex;
int w;
}e[8000005];
struct no{
int x,v;
bool operator <(const no &T)const{return v>T.v;}
};
priority_queue<no>q;
void lj(int t1,int t2,int t3){
e[++tot].v=t2;e[tot].w=t3;e[tot].nex=head[t1];head[t1]=tot;
}
bool flag[maxn];
int main()
{
cin>>n>>m>>K;
for(int i=1;i<=m;i++){
scanf("%d%d%d",&t1,&t2,&t3);
lj(t1,t2,t3);
}
cin>>S>>T;
for(int i=1;i<=n;i++){
for(int j=0;j<=22;j++){
if(i&(1<<j)){
int ne=i-(1<<j);
if(ne<=n)lj(i,ne,(1<<j)*K);
}
else {
int ne=i+(1<<j);
if(ne<=n)lj(i,ne,(1<<j)*K);
}
}
}
for(int i=1;i<=n;i++)d[i]=inf;
d[S]=0;no t;t.x=S,t.v=0;
q.push(t);
for(int i=1;i<=n;i++){
if(q.empty())break;
no k;
while(flag[q.top().x]&&!q.empty())q.pop();
if(!q.empty())k=q.top();
else break;
flag[k.x]=1;
if(k.x==T)break;
for(int i=head[k.x];i;i=e[i].nex){
if(d[e[i].v]>d[k.x]+e[i].w&&!flag[e[i].v]){
d[e[i].v]=d[k.x]+e[i].w;
t.x=e[i].v,t.v=d[e[i].v];
q.push(t);
}
}
}
cout<<d[T]<<endl;
return 0;
}
基里巴斯(path)的更多相关文章
- NodeJs之Path
Path模块 NodeJs提供的Path模块,使得我们可以对文件路径进行简单的操作. API var path = require('path'); var path_str = '\\Users\\ ...
- 【原】实时渲染中常用的几种Rendering Path
[原]实时渲染中常用的几种Rendering Path 本文转载请注明出处 —— polobymulberry-博客园 本文为我的图形学大作业的论文部分,介绍了一些Rendering Path,比较简 ...
- Node.js:path、url、querystring模块
Path模块 该模块提供了对文件或目录路径处理的方法,使用require('path')引用. 1.获取文件路径最后部分basename 使用basename(path[,ext])方法来获取路径的最 ...
- VSCode调试go语言出现:exec: "gcc": executable file not found in %PATH%
1.问题描述 由于安装VS15 Preview 5,搞的系统由重新安装一次:在用vscdoe编译go语言时,出现以下问题: # odbcexec: "gcc": executabl ...
- Leetcode 笔记 113 - Path Sum II
题目链接:Path Sum II | LeetCode OJ Given a binary tree and a sum, find all root-to-leaf paths where each ...
- Leetcode 笔记 112 - Path Sum
题目链接:Path Sum | LeetCode OJ Given a binary tree and a sum, determine if the tree has a root-to-leaf ...
- Thinking in Unity3D:渲染管线中的Rendering Path
关于<Thinking in Unity3D> 笔者在研究和使用Unity3D的过程中,获得了一些Unity3D方面的信息,同时也感叹Unity3D设计之精妙.不得不说,笔者最近几年的 ...
- node之path模块
node之path模块 原文链接 //引用该模块 var path = require("path"); 1.路径解析,得到规范化的路径格式 对window系统,目录分隔为'', ...
- Linux系统修改PATH环境变量方法
在Linux安装一些软件通常要添加路径环境变量PATH.PATH环境变量通俗的讲就是把程序的路径"备案"到系统中,这样执行这些程序时就不需要输入完整路径,直接在bash输入程序名就 ...
随机推荐
- 拷贝时间测试=cudamelloc+cudahostalloc
/* * Copyright 1993-2010 NVIDIA Corporation. All rights reserved. * * NVIDIA Corporation and its lic ...
- 分享12款最佳的Bootstrap设计工具
设计师总会渴望有一些新奇有趣的设计工具来提高工作效率,而Bootstrap就是您的不二选择.2013年Bootstrap得到了广泛普及, 它是开发者较为常用的框架之一,本文我们将分享12款最佳的Boo ...
- C#逻辑运算符
一.C#逻辑运算符 C#语言的逻辑运算符是对变量的值.表达式的运算结果进行比较,基比较结果为True或False. 二.示例 using System;using System.Collections ...
- C的xml编程-libxml2
这里主要讲述libxml2在linux下的使用. (以下内容除了linux下的安装步骤是自己写的,其余均出自http://www.blogjava.net/wxb_nudt/archive/2007/ ...
- java中equals和==的区别详解
java中的数据类型,可分为两类: 1.基本数据类型. byte,short,char,int,long,float,double,boolean这八大原始数据类型他们之间的比较,使用“==”,比较的 ...
- swpan&expect交互脚本
#!/usr/bin/expectset timeout 30set user USERNAMEset pass PASSWORDspawn sudo pg_dump npi -U admin -p ...
- jQuery的select2下拉框的搜索功能(使用select2插件,方便简单)
第一步: 引入我们用使用的插件 jquery: select2: css: js: 第二步: 创建一个html页面,body内容: <div> <select class=" ...
- printf("\033[1;33m ***** \033[0m \n");
printf("\033[1;33m Hello World. \033[0m \n"); 颜色如下: none = "\033[0m" black = &qu ...
- UVA - 10213 How Many Pieces of Land?(欧拉公式 + 高精度)
圆上有n个点,位置不确定.问这些点两两连接成的线段,最多可以把圆划分成多少块平面? 欧拉公式:V-E+F = 2,V是点数,E是边数,F是面数. 答案是F=C(n,4)+C(n,2)+1,看的别人推的 ...
- 8、python中的集合
集合是python中无序.可变的数据结构.集合与字典类似,集合中的元素必须是可哈希的(等同于字典中的键),也就是说集合中的元素是唯一.不可变的数据类型.这里前面说集合可变,后面又说集合中的元素不可变是 ...