背景

  Candy住在一个被划分为n个区域的神奇小镇中,其中Candy的家在编号为n的区域,Candy生日这天,大家都急急忙忙赶去Candy家庆祝Candy的生日。

描述

  Candy共有t个朋友住在不同的区域。小镇有m条道路,小镇的神奇之处在于其中的p1条道路只会在你走过区域的的个数为奇数时候开启,p2道路只会在你走过区域的个数为偶数的时候开启,剩下的道路一直都会开启。并且,所有的道路只能够单向通过。飘飘乎居士希望知道在所有的好朋友中,谁离Candy最近?。

输入格式

第一行:两个正整数n m,表示共n个区域,m条道路
接下来m行,每行三个正整数u v s表示u到v的单向道路,路程为s,其中第i条道路的编号为i。
接着一个整数p1以及p1个正整数odd[i],表示编号为odd[i]的道路只会在走过奇数个区域时开启。
接着一个整数p2以及p2个正整数even[i],表示编号为even[i]的道路只会在走过偶数个区域时开启。
接下来一个正整数 t
紧接着t行,每行一个正整数h以及一个不超过10个字符长度的字符串na(且均有小写字母组成),表示在h区域居住着名字为na的人。

输出格式

第一行,即距离candy家最近的人的名字,数据保证有且只有一个人为最后的答案。      
第二行,该人到candy家的距离。
        如果存在多解,则输入名字中字典序较小的一人。

测试样例1

输入

4 5 
1 2 2 
3 4 2 
2 4 4 
1 3 1 
2 3 1 
1 4 
1 2 

2 violethill 
1 pink

输出

violethill 
4

备注

pink尽管从1->3->4距离更近,但因为1->2的这条道路只有在走过奇数个区域时才开启,而pink此时走过的区域为偶数个(0个)(我们规定,出发点不算走第一个区域),所以pink只好沿1—>2—>3—>4,距离为5;
Violethill尽管沿2—>3—>4距离为3,但因为3—>4这条道路只有在走过偶数个区域时才开启,当violethill从2到3时,只走了奇数个(1个)区域,道路不会开启。所以,violethill只好沿2—>4这条道路行走,距离为4,所以violethill比pink更快到candy家中,并且距离为4。
对于30%的数据 0<n<=100
对于100%的数据0<n<=10000   0<m<=100000
对于所有数据保证两区域间的距离<=100000
数据保证运算即结果在maxlongint以内
数据保证输入的正确性,即至少有一个人可以到达candy家中,并且一个区域最多只有一人,不会出现相同名字的人。
友情提示:可能出现有些道路既在odd中出现,也在even中出现。并且odd或者even中的数都可能出现重复数字。
 
 
题目有毒!!!可能出现有些道路既在odd中出现,也在even中出现,意思是一直开启而不是由于条件矛盾而都不开启。
由于这个我一直WA三个点还以为自己又犯了什么智障错误要写手打堆了呢。。。
我们把有奇数限制的边叫为奇边,有偶数限制的边叫为偶边,没有限制(既在odd中出现,也在even中出现或都没出现)的边拆成一条奇边和一条偶边。
我们把每个区域分成两个点,一个为入边为奇边,出边为偶边的,一个为入边为偶边,出边为奇边的,然后反向建图spfa。
//Serene
#include<algorithm>
#include<iostream>
#include<cstring>
#include<cstdlib>
#include<cstdio>
#include<cmath>
using namespace std;
#define ull unsigned long long
const int maxn=2e4+10,maxm=2e5+10;
const ull INF=-1;
int n,m;
int mu[maxm],mv[maxm];
ull ms[maxm],ans=INF;
bool modd[maxm],meven[maxm]; ull aa;char cc;
ull read() {
aa=0;cc=getchar();
while(cc<'0'||cc>'9') cc=getchar();
while(cc>='0'&&cc<='9') aa=aa*10+cc-'0',cc=getchar();
return aa;
} struct Pp{
int x;string s;
}pp[maxn]; bool cmp(const Pp &a,const Pp &b) {
return a.s<b.s;
} int fir[maxn],nxt[maxm],to[maxm],e=0;ull v[maxm];
void add(int y,int x,int z) {
to[++e]=y;nxt[e]=fir[x];fir[x]=e;v[e]=z;
} ull dis[maxn];
int zz[maxn];
bool vis[maxn];
void spfa(int st){
memset(dis,-1,sizeof(dis));
int s=1,t=0,x,y,z;
dis[st]=0;zz[++t]=st;vis[st]=1;
while(s<=t) {
x=zz[s%maxn];s++;vis[x]=0;
for(y=fir[x];y;y=nxt[y]) {
z=to[y];
if(dis[z]<=dis[x]||dis[z]<=dis[x]+v[y]) continue;
dis[z]=dis[x]+v[y];
if(!vis[z]) {
vis[z]=1;t++;
zz[t%maxn]=z;
}
}
}
} int main() {
n=read();m=read();
for(int i=1;i<=m;++i) {
mu[i]=read();mv[i]=read();
ms[i]=read();
}
int x=read(),y;
for(int i=1;i<=x;++i) {
y=read();modd[y]=1;
}
x=read();
for(int i=1;i<=x;++i) {
y=read();meven[y]=1;
}
for(int i=1;i<=m;++i) {
if(!modd[i]) add(mu[i],mv[i]+n,ms[i]);
if(!meven[i]) add(mu[i]+n,mv[i],ms[i]);
if(modd[i]&&meven[i]) {
add(mu[i]+n,mv[i],ms[i]);
add(mu[i],mv[i]+n,ms[i]);
}
}
add(n,2*n+1,0);add(2*n,2*n+1,0);
x=read();
for(int i=1;i<=x;++i) {
pp[i].x=read();
cin>>pp[i].s;
}
sort(pp+1,pp+x+1,cmp);
spfa(2*n+1);y=0;
for(int i=1;i<=x;++i) {
if(dis[pp[i].x]<ans) {
y=i;ans=dis[pp[i].x];
}
}
cout<<pp[y].s<<"\n";
cout<<ans;
return 0;
}

tyvj1467 通向聚会的道路的更多相关文章

  1. 【TYVJ】1467 - 通向聚会的道路(spfa+特殊的技巧)

    http://tyvj.cn/Problem_Show.aspx?id=1467 这题我并不是看题解a的.但是确实从题解得到了启发. 一开始我就想到一个正解,设d[i][0]表示i开始走过奇数个点的最 ...

  2. [HNOI/AHOI2018]道路

    Description: W 国的交通呈一棵树的形状.W 国一共有\(n - 1\)个城市和\(n\)个乡村,其中城市从\(1\)到\(n - 1\) 编号,乡村从\(1\)到\(n\)编号,且\(1 ...

  3. 【HNOI 2018】道路

    Problem Description \(W\) 国的交通呈一棵树的形状.\(W\) 国一共有\(n - 1\)个城市和\(n\)个乡村,其中城市从\(1\)到\(n - 1\) 编号,乡村从\(1 ...

  4. [HNOI2018]道路 --- 树形DP

    [HNOI2018]道路 题目描述: W 国的交通呈一棵树的形状.W 国一共有 \(n-1\) 个城市和 \(n\) 个乡村, 其中城市从 \(1\) 到 \(n-1\) 编号,乡村从 \(1\) 到 ...

  5. loj #2510. 「AHOI / HNOI2018」道路

    #2510. 「AHOI / HNOI2018」道路 题目描述 W 国的交通呈一棵树的形状.W 国一共有 n−1 个城市和 nnn 个乡村,其中城市从 111 到 n−1 编号,乡村从 111 到 n ...

  6. [HNOI2018]道路(DP)

    题目描述 W 国的交通呈一棵树的形状.W 国一共有n−1n - 1n−1 个城市和nnn 个乡村,其中城市从111 到n−1n - 1n−1 编号,乡村从111 到nnn 编号,且111 号城市是首都 ...

  7. [洛谷P4438] HNOI2018 道路

    问题描述 W 国的交通呈一棵树的形状.W 国一共有n - 1个城市和n个乡村,其中城市从1到n - 1 编号,乡村从1到n编号,且1号城市是首都.道路都是单向的,本题中我们只考虑从乡村通往首都的道路网 ...

  8. [摘录]第三部分 IBM文化(2)

    第二十二章 原则性领导 在一个组织程序已经变得不受其来源和内容的约束,而且其编纂出来的组织宗旨已经代替了个人责任的组织之中,你所面临的首要任务,就是要全盘抹掉这个程序本身,以便让整个封闭的系统呼吸新鲜 ...

  9. Java NIO:NIO概述

    Java NIO:NIO概述 在上一篇博文中讲述了几种IO模型,现在我们开始进入Java NIO编程主题.NIO是Java 4里面提供的新的API,目的是用来解决传统IO的问题.本文下面分别从Java ...

随机推荐

  1. qq邮箱html邮件,图片不显示的问题

    测试无论是站外的图片还是站内的图片,qq邮箱都会过滤图片,导致显示不出来. 解决办法:图片base64编码.效果图: 代码: <div class="container"&g ...

  2. 【python之路32】python异常处理

    一.捕获异常 1.try  except #!usr/bin/env python # -*- coding:utf-8 -*- num = input("请输入一个数字:") t ...

  3. CSS3的transform 转换

    transform是可以实现元素位移,旋转,缩放和变形.只介绍了2D转换~ translate 位移:改变元素位置 最多设置两个值,一个水平,一个垂直.如果设置为负数,则代表反方向.可设置百分比.eg ...

  4. 访问树中的所有元素(DOM)

    创建一个函数,给定页面上的DOM元素,将访问元素本身及其所有后代(而不仅仅是它的直接子代).对于访问的每个元素,函数应将该元素传递给提供的回调函数. 函数的参数应该是: 一个DOM元素 一个回调函数( ...

  5. CesiumLab地形处理成果在Tomcat和IIS上发布

    地形瓦片(散列文件)可以直接放到tomcat或iis下发布,而不用进行额外的开发,从而满足普通用户的需求.下面我们来介绍下如何通过cesiumlab生成的瓦片发布并在前端展示. 1.数据准备: 首先通 ...

  6. 提升mysql服务器性能(HA MMM MHA MaxScale)

    原文:提升mysql服务器性能(HA MMM MHA MaxScale) 版权声明:皆为本人原创,复制必究 https://blog.csdn.net/m493096871/article/detai ...

  7. PYTHON网络爬虫与信息提取[信息的组织与提取](单元五)

    1 三种信息类型的简介 xml : extensible markup language 与html非常相似 现有html后有xml xml是html发展来的 扩展 通用 json  类型 javas ...

  8. 洛谷P1147 连续自然数和 [2017年6月计划 数论01]

    P1147 连续自然数和 题目描述 对一个给定的自然数M,求出所有的连续的自然数段,这些连续的自然数段中的全部数之和为M. 例子:1998+1999+2000+2001+2002 = 10000,所以 ...

  9. UE4物理模块(三)---碰撞查询(下)SAP/MBP/BVH算法简介

    在上一文中介绍了碰撞查询的配置方法: Jerry:UE4物理模块(三)---碰撞查询(上)​zhuanlan.zhihu.com 本篇介绍下UE4的各种零大小的射线检测,以及非零大小(带体积)的射线检 ...

  10. cf round 482D Kuro and GCD and XOR and SUM

    题意: 开始有个空集合,现在有两种操作: $(1,x)$:给集合加一个数$x$,$x \leq 10^5$; $(2,x,k,s)$:在集合中找一个$a$,满足$a \leq s-x$,而且$k|gc ...