博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
HDU4522 湫湫系列故事——过年回家
阅读量:5011 次
发布时间:2019-06-12

本文共 2043 字,大约阅读时间需要 6 分钟。

传送门:

中文题面。

思路:拿spfa对卧铺和硬铺分别跑spfa,然后找两个的最短路。体感堆优化的dij也可以,不过spfa跑跑就过去了。有个细节是最后得用long long 存数据,其他的没啥。

           去重边是拿set存的邻接表。判断是否是数字用的isdigit函数。懒的要命系列。

#include 
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
using namespace std; #define LL long long #define pb push_back #define mk make_pair #define pill pair
#define mst(a, b) memset(a, b, sizeof a) #define REP(i, x, n) for(int i = x; i <= n; ++i)int vis[1000],dis[1000],n,m;set
v1[210];set
v2[210];void spfa(int st,int key){ queue
q; memset(vis,0,sizeof(vis)); for(int i = 0 ; i <= n ; i++){ dis[i] = 100000000; } q.push(st); vis[st] = 1; dis[st] = 0; while(!q.empty()){ int v = q.front(); vis[v] = 0 ; q.pop(); if(key == 1){ set
::iterator it = v1[v].begin(); for(;it != v1[v].end(); it++){ int to = *it; if(dis[to] > dis[v] + 1){ dis[to] = dis[v] + 1; if(!vis[to]){ q.push(to); vis[to] = 1; } } } } else{ set
::iterator it = v2[v].begin(); for(;it != v2[v].end(); it++){ int to = *it; if(dis[to] > dis[v] + 1){ dis[to] = dis[v] + 1; if(!vis[to]){ q.push(to); vis[to] = 1; } } } } }}int main(){ int t; for(scanf("%d",&t);t--;){ char s[10010]; scanf("%d %d",&n,&m); for(int i = 0 ; i <= n ; i++){ v1[i].clear(); v2[i].clear(); } while(m--){ int num; scanf("%s %d",s,&num); int k = 0, y = -1; int len = strlen(s); for(int i = 0 ; i < len ; i++){ if(isdigit(s[i])){ k = k * 10 + (s[i] - '0'); } else{ if(y == -1) y = k; else{ v1[y].insert(k); if(num > 0){ v2[y].insert(k); } y = k; } k = 0; } } v1[y].insert(k); if(num > 0){ v2[y].insert(k); } } long long ans1 = 0,ans2 = 0; int d1,d2,st,ed; scanf("%d %d %d %d",&d1,&d2,&st,&ed); spfa(st,1); ans1 = dis[ed]; spfa(st,0); ans2 = dis[ed]; if(ans1 == 100000000 && ans2 == 100000000 ){ puts("-1");continue; } //printf("%d %d\n",ans1,ans2); printf("%lld\n",min(ans1*d1*1LL,ans2*d2*1LL)); }}

 

转载于:https://www.cnblogs.com/Esquecer/p/9013168.html

你可能感兴趣的文章
Mysql的read_only 只读属性说明 (运维笔记)
查看>>
DOCKER 从入门到放弃(五)
查看>>
Python 多线程学习
查看>>
appcan官方ajax
查看>>
获取NVIDIA显卡的温度
查看>>
Dijkstra算法
查看>>
Deep Learning 9: Performance
查看>>
面试题61 把二叉树打印成多行
查看>>
C#例子 易懂故事 接口 委托 事件 异步通知 好玩.
查看>>
[转]Windows Shell 编程 第十一章 【来源:http://blog.csdn.net/wangqiulin123456/article/details/7987992】...
查看>>
修改presto新版源码让他支持redash数据库
查看>>
Javascript的书写位置
查看>>
树-线索二叉树
查看>>
JAVA遇见HTML——Servlet篇:Servlet基础
查看>>
第二章 Vue快速入门--20 品牌案例-完成品牌列表的添加功能+ 21 品牌案例-根据Id完成品牌的删除...
查看>>
Java单例模式
查看>>
重温WCF之消息契约(MessageContract)(六)
查看>>
Excel2007制作直方图和正态分布曲线图
查看>>
android adb常用指令
查看>>
Android框架之路——GreenDao3.2.2的使用
查看>>