PAT (Advanced Level) 1018. Public Bike Management (30)
先找出可能在最短路上的边,图变成了一个DAG,然后在新图上DFS求答案就可以了。
#include<iostream>
#include<cstring>
#include<cmath>
#include<algorithm>
#include<cstdio>
#include<queue>
#include<vector>
using namespace std; const int INF=0x7FFFFFFF;
const int maxn=;
int n,m,C1,C2,tot;
int Cmax;
int val[maxn];
struct Edge
{
int u,v,L;
}e[];
int f[];
vector<int>g[maxn];
int dis[][maxn]; int ans[maxn],cnt;
int sta[maxn]; int MIN1,MIN2; void init()
{
MIN1=MIN2=INF;
tot=;C1=;
for(int i=;i<=;i++) g[i].clear();
} void add(int a,int b,int c)
{
e[tot].u=a,e[tot].v=b,e[tot].L=c;
g[a].push_back(tot);
tot++;
} void read()
{
scanf("%d%d%d%d",&Cmax,&n,&C2,&m);
for(int i=;i<=n;i++) scanf("%d",&val[i]);
for(int i=;i<=m;i++)
{
int u,v,L; scanf("%d%d%d",&u,&v,&L);
add(u,v,L);
add(v,u,L);
}
} void SPFA(int f,int st)
{
for(int i=;i<=;i++) dis[f][i]=INF;
dis[f][st]=;
int flag[maxn]; memset(flag,,sizeof flag);
queue<int>Q; Q.push(st); flag[st]=;
while(!Q.empty())
{
int head= Q.front(); Q.pop(); flag[head]=;
for(int i=;i<g[head].size();i++)
{
int id=g[head][i];
if(dis[f][head]+e[id].L<dis[f][e[id].v])
{
dis[f][e[id].v]=dis[f][head]+e[id].L;
if(flag[e[id].v]==)
{
Q.push(e[id].v);
flag[e[id].v]=;
}
}
}
}
} void dfs(int x,int num1,int num2,int deep)
{
sta[deep]=x; if(x==C2)
{
if(num2<MIN2)
{
MIN2=num2;
MIN1=num1;
for(int i=;i<=deep;i++) ans[i]=sta[i];
tot=deep;
} else if(num2==MIN2&&num1<MIN1)
{
MIN2=num2;
MIN1=num1;
for(int i=;i<=deep;i++) ans[i]=sta[i];
tot=deep;
}
return;
} for(int i=;i<g[x].size();i++)
{
if(f[g[x][i]]==) continue;
int to=e[g[x][i]].v; if(val[to]==Cmax/) dfs(to,num1,num2,deep+);
else if(val[to]>Cmax/) dfs(to,num1+val[to]-Cmax/,num2,deep+);
else if(val[to]<Cmax/)
{
if(num1>Cmax/-val[to]) dfs(to,num1+val[to]-Cmax/,num2,deep+);
else dfs(to,,num2+Cmax/-val[to]-num1,deep+);
}
}
} void work()
{
int len=dis[][C2]; for(int i=;i<tot;i++)
if(dis[][e[i].u]+e[i].L+dis[][e[i].v]==len)
f[i]=; dfs(,,,); printf("%d ",MIN2);
for(int i=;i<=tot;i++)
{
if(i<tot) printf("%d->",ans[i]);
else printf("%d ",ans[i]);
}
printf("%d\n",MIN1);
} int main()
{
init();
read();
SPFA(,C1);
SPFA(,C2);
work();
return ;
}
PAT (Advanced Level) 1018. Public Bike Management (30)的更多相关文章
- PTA (Advanced Level) 1018 Public Bike Management
Public Bike Management There is a public bike service in Hangzhou City which provides great convenie ...
- Pat(Advanced Level)Practice--1018(Public Bike Management)
Pat1018代码 题目描写叙述: There is a public bike service in Hangzhou City which provides great convenience t ...
- 【PAT甲级】1018 Public Bike Management (30 分)(SPFA,DFS)
题意: 输入四个正整数C,N,S,M(c<=100,n<=500),分别表示每个自行车站的最大容量,车站个数,此次行动的终点站以及接下来的M行输入即通路.接下来输入一行N个正整数表示每个自 ...
- PAT 甲级 1018 Public Bike Management (30 分)(dijstra+dfs,dfs记录路径,做了两天)
1018 Public Bike Management (30 分) There is a public bike service in Hangzhou City which provides ...
- PAT Advanced 1018 Public Bike Management (30) [Dijkstra算法 + DFS]
题目 There is a public bike service in Hangzhou City which provides great convenience to the tourists ...
- 1018. Public Bike Management (30)
时间限制 400 ms 内存限制 65536 kB 代码长度限制 16000 B 判题程序 Standard 作者 CHEN, Yue There is a public bike service i ...
- 1018 Public Bike Management (30)(30 分)
时间限制400 ms 内存限制65536 kB 代码长度限制16000 B There is a public bike service in Hangzhou City which provides ...
- 1018 Public Bike Management (30 分)
There is a public bike service in Hangzhou City which provides great convenience to the tourists fro ...
- 1018 Public Bike Management (30分) 思路分析 + 满分代码
题目 There is a public bike service in Hangzhou City which provides great convenience to the tourists ...
随机推荐
- Docker私有仓库Registry 搭建
1. 关于Registry 官方的Docker hub是一个用于管理公共镜像的好地方,我们可以在上面找到我们想要的镜像,也可以把我们自己的镜像推送上去.但是,有时候,我们的使用场景需要我们拥有一个私有 ...
- css 相关
background-size: auto就会变成就是不会让图像变形的,会自动调整,一般是会设置多少箱像素的, background-size: XXpx XXpx;百分百那就铺满整个区域了 back ...
- Java学习笔记之I/O
package com.chinasofti.javase20160819; import java.io.BufferedReader; import java.io.BufferedWriter; ...
- 1.4 测试各阶段(单元、集成、系统 、Alpha、Beta、验收)
单元测试:单元测试是对软件基本组成单元(软件设计的最小单位)进行正确性检验的测试工作,如函数.过程(function,procedure)或一个类的方法(method).单元测试是一个方法层面上的测试 ...
- Filter 解决web网页跳转乱码
为什么采用filter实现了字符集的统一编码 问题: 为什么会有字符集编码的问题呢?对于Java Web应用,使用Tomcat容器获取和传递的参数(request.getParameter())默认是 ...
- haxe 嵌入swf 读取里面的内容
首先安装 swf 库,运行命令: 命令提示符: haxelib install swf 在project.xml 加上 <!-- 导入swf类库 --> <haxelib name= ...
- MaterialEditText 控件学习
这个视图原始框架地址:https://github.com/rengwuxian/MaterialEditText 指导手册:http://www.rengwuxian.com/post/materi ...
- NYOJ 925 国王的烦恼
从最后一天开始往前加边. 同一天的边同时加到图上,加完之后检查集合数量是否和没加之前有变化. 有变化的话,答案就+1. #include<cstdio> #include <iost ...
- typedef void far *LPVOID 的具体定义
首先这里的far,在32位系统已经废除不用了.它是C/C++语言在16位系统中用以标明指针是个远指针的修饰符. 远指针是说指针所指向的地址已经超出了64K(2的十六次方),所以需要使用DS加偏移量的方 ...
- 剑指offer 整数中1 出现的次数
给定一个十进制正整数N,写下从1开始,到N的所有整数,然后数一下其中出现的所有"1"的个数. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 1 ...