3 空间活动

【题目描述】

贝茜和佩奇正在玩一款游戏,在游戏开始会生成一个有n个点m条单向边的地图,经过每条边需要花费价格为Hi的费用(Hi<=1000)。但是如果两个点可以互相到达,那么这两个点之间需要花费的价格就变为0。总共有k关,每一关会给你两个点a,b(0< a,b <=n),让你求从a走到b的最小花费。

【输入格式】

第一行三个数n,m,k;

接下来m行每行三个数,x,y,Hi表示存在一条(x,y)的单向边,边权为Hi;

接下来k行每行两个数a,b。

【输出格式】

k行,每行一个数表示从a走到b的最小花费(如果不能从a走到b,那么输出“No”)。

【样例输入】

4 5 5

1 2 5

2 1 10

3 4 8

4 3 7

2 3 6

1 2

1 3

1 4

4 3

4 1

【样例输出】

0

6

6

0

No

【数据范围】

对于30%的数据n<=20,k<=1;

对于另外30%的数据 n<=100,m=n-1,k<=50;

对于100%的数据 n<=1000,m<=2500,k<=100;

思路:

看到互相到达点权位0自然想到缩点

缩完点后对于每组询问跑djstl即可

代码:

#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<queue>
#define rii register int i
#define rij register int j
#define inf 19260817
using namespace std;
int n,m,k,low[],dfn[],vis[];
int top,tot,color[],head[],sta[],bj[];
int cnt,bnt;
struct ljb{
int nxt,to,val;
}x[];
struct cb{
int from,to,val;
}y[];
struct jd{
int bh,val;
friend bool operator < (jd lk,jd kl)
{
return lk.val>kl.val;
}
}s[];
priority_queue<jd> q;
void djstl(int wz)
{
for(rii=;i<=n;i++)
{
s[i].bh=i;
s[i].val=inf;
}
memset(bj,,sizeof(bj));
s[wz].val=;
q.push(s[wz]);
while(q.empty()!=true)
{
wz=q.top().bh;
q.pop();
if(bj[wz])
{
continue;
}
bj[wz]=true;
for(rii=head[wz];i!=;i=x[i].nxt)
{
if(bj[x[i].to]==)
{
continue;
}
if(s[x[i].to].val>s[wz].val+x[i].val)
{
s[x[i].to].val=s[wz].val+x[i].val;
q.push(s[x[i].to]);
}
}
}
}
inline void add(int from,int to,int val)
{
bnt++;
x[bnt].val=val;
x[bnt].to=to;
x[bnt].nxt=head[from];
head[from]=bnt;
}
void tarjan(int wz)
{
cnt++;
low[wz]=cnt;
dfn[wz]=cnt;
top++;
sta[top]=wz;
vis[wz]=;
for(rii=head[wz];i!=;i=x[i].nxt)
{
int ltt=x[i].to;
if(dfn[ltt]==)
{
tarjan(ltt);
low[wz]=min(low[wz],low[ltt]);
}
else
{
if(vis[ltt]!=)
{
low[wz]=min(low[wz],dfn[ltt]);
}
}
}
if(low[wz]==dfn[wz])
{
tot++;
while(sta[top+]!=wz)
{
color[sta[top]]=tot;
vis[sta[top]]=;
top--;
}
}
}
int main()
{
freopen("play.in","r",stdin);
freopen("play.out","w",stdout);
scanf("%d%d%d",&n,&m,&k);
for(rii=;i<=m;i++)
{
int from,to,val;
scanf("%d%d%d",&from,&to,&val);
y[i].from=from;
y[i].to=to;
y[i].val=val;
add(from,to,val);
}
for(rii=;i<=n;i++)
{
if(dfn[i]==)
{
tarjan(i);
}
}
memset(x,,sizeof(x));
memset(head,,sizeof(head));
bnt=;
for(rii=;i<=m;i++)
{
int from=y[i].from;
int to=y[i].to;
if(color[from]!=color[to])
{
add(color[from],color[to],y[i].val);
}
}
for(rii=;i<=k;i++)
{
int from,to;
scanf("%d%d",&from,&to);
if(color[from]==color[to])
{
puts("");
continue;
}
djstl(color[from]);
if(s[color[to]].val==inf)
{
puts("No");
}
else
{
printf("%d\n",s[color[to]].val);
}
}
}

20181029NOIP模拟赛T3的更多相关文章

  1. 体育成绩统计——20180801模拟赛T3

    体育成绩统计 / Score 题目描述 正所谓“无体育,不清华”.为了更好地督促同学们进行体育锻炼,更加科学地对同学们进行评价,五道口体校的老师们在体育成绩的考核上可谓是煞费苦心.然而每到学期期末时, ...

  2. 20180520模拟赛T3——chess

    [问题描述] 小美很喜欢下象棋. 而且她特别喜欢象棋中的马. 她觉得马的跳跃方式很独特.(以日字格的方式跳跃) 小芳给了小美一张很大的棋盘,这个棋盘是一个无穷的笛卡尔坐标. 一开始\(time=0\) ...

  3. 20161005 NOIP 模拟赛 T3 解题报告

    subset 3.1 题目描述 一开始你有一个空集,集合可以出现重复元素,然后有 Q 个操作 1. add s 在集合中加入数字 s. 2. del s 在集合中删除数字 s.保证 s 存在 3. c ...

  4. ztz11的noip模拟赛T3:评分系统

    代码: #include<iostream> #include<cstdio> #include<cstring> #include<algorithm> ...

  5. 20180711模拟赛T3——聚变

    文件名: fusion 题目类型: 传统题 时间限制: 3秒 内存限制: 256MB 编译优化: 无 题目描述 知名科学家小A在2118年在计算机上实现了模拟聚变的过程. 我们将她研究的过程简化. 核 ...

  6. 4.26 省选模拟赛 T3 状压dp 差分求答案

    LINK:T3 比较好的题目 考试的时候被毒瘤的T2给搞的心态爆炸 这道题连正解的思路都没有想到. 一看到题求删除点的最少个 可以使得不连通. 瞬间想到最小割 发现对于10分直接跑最小割即可. 不过想 ...

  7. NOIP欢乐模拟赛 T3 解题报告

    3.小澳的葫芦 (calabash.cpp/c/pas) [题目描述] 小澳最喜欢的歌曲就是<葫芦娃>. 一日表演唱歌,他尽了洪荒之力,唱响心中圣歌. 随之,小澳进入了葫芦世界. 葫芦世界 ...

  8. 字符串模拟赛T3

    只看我的做法就够了 #include<iostream> #include<cstdio> #include<string> #include<cstring ...

  9. 神奇的NOIP模拟赛 T3 LGTB 玩THD

    LGTB 玩THD LGTB 最近在玩一个类似DOTA 的游戏名叫THD有一天他在守一座塔,对面的N 个小兵排成一列从近到远站在塔前面每个小兵有一定的血量hi,杀死后有一定的金钱gi每一秒,他都可以攻 ...

随机推荐

  1. 微信证书 javax.net.ssl.SSLException: java.lang.RuntimeException: Unexpected error: java.security.InvalidAlgorithmParameterException: the trustAnchors parameter must be non-empty

    这几天在做微信退款接口,按照api写完之后,在本地测试了下没有问题,于是交给测试让他们在测试环境开测.他们说退款没有成功,感觉去查日志,发现后台报了 javax.net.ssl.SSLExceptio ...

  2. 【PHP系列】框架的抉择

    缘起 在PHP开发中,选择合适的框架有助于加快软件开发,节约宝贵的项目时间,让开发者专注于功能的实现上.框架的问题是需要很多的投入,选择框架时,我们更看重这个框架的未来,存在多年的大型框架必须要有好的 ...

  3. 微信小程序——代码构成

    通过上一章讲解,我们了解到如何初始化一个小程序项目,这里是官方给到demo地址,通过demo来看教程更方便于我们理解项目架构. 由四种文件构成: .json 后缀的 JSON 配置文件 .wxml 后 ...

  4. png的故事:隔行扫描算法

    转载自AlloyTeam:http://www.alloyteam.com/2017/06/the-story-of-png-deinterlacing-algorithm/ 前言 前文已经讲解过如何 ...

  5. /usr/lib64/python2.6/site-packages/cryptography/__init__.py:26: DeprecationWarning: Python 2.6 is no longer supported by the Python core team

    升级python2.6到2.7后,执行ansible后一直显示警告,如标题所示. 因为安装ansible,使用的是yum的方式,而yum使用的是python2.6,所以ansible安装环境为pyth ...

  6. Oracle实例初始化参数详解

    BACKGROUND_DUMP_DEST 显示和设置Oracle数据库相关日志的存放地,Oracle11g后不再可配置,但其值仍可显示相关日志的存放地,对应配置参数为diagnostic_dest U ...

  7. selenium+python 数据驱动-txt篇

    #循环读取txt文件中的数据,可以作为用户名,密码等使用from selenium import webdriver #创建两个列表user=[]pwd=[]f=open(r'C:\bbs\data\ ...

  8. LINUX基础了解

  9. React Native for Android on Windows 配置开发安装总结

    配置开发安装总结(由于当前react-native更新较快,目前是针对2015年11月底时的reacti-native android for windows版本,有些内容可能过时) 官方的安装指导在 ...

  10. 类图(Rose) - Windows XP经典软件系列

    版权声明:本文为xiaobin原创文章.未经博主同意不得转载. https://blog.csdn.net/xiaobin_HLJ80/article/details/24584625         ...