https://www.patest.cn/contests/pat-a-practise/1018

先用Dijkstra算出最短路,然后二分答案来验证,顺便求出剩余最小,然后再从终点dfs回去求出路径

#include<cstdio>
#include<string>
#include<cstring>
#include<vector>
#include<iostream>
#include<queue>
#include<algorithm>
using namespace std;
typedef long long LL;
const int INF = 0x7FFFFFFF;
const int maxn = 1e3 + 10;
int c, n, s, m, f[maxn], map[maxn][maxn], x, y, z, dis[maxn], vis[maxn], ans;

void dfs(int x, int y)
{
	if (y < 0) return;
	if (x == s) { ans = min(ans, y); return; }
	for (int i = 0; i <= n; i++)
	{
		if (map[x][i] == -1) continue;
		if (dis[i] == dis[x] + map[x][i]) dfs(i, y - (c / 2 - f[i]));
	}
}

bool Dfs(int x, int y, int z)
{
	if (!x) { if (y == z) { printf("0"); return true; } else return false; }
	for (int i = 0; i <= n; i++)
	{
		if (map[x][i] == -1) continue;
		if (dis[x] == dis[i] + map[x][i])
		{
			if (Dfs(i, y + c / 2 - f[x], z))
			{
				printf("->%d", x);
				return true;
			}
		}
	}
	return false;
}

int main()
{
	scanf("%d%d%d%d", &c, &n, &s, &m);
	for (int i = 1; i <= n; i++) scanf("%d", &f[i]);
	memset(map, -1, sizeof(map));
	memset(dis, -1, sizeof(dis));
	while (m--)
	{
		scanf("%d%d%d", &x, &y, &z);
		if (map[x][y] == -1 || map[x][y] > z) map[x][y] = map[y][x] = z;
	}
	dis[0] = 0;
	while (true)
	{
		int now = -1;
		for (int i = 0; i <= n; i++)
		{
			if (!vis[i] && dis[i] != -1 && (now == -1 || dis[i] < dis[now])) now = i;
		}
		if (now == -1) break;
		vis[now] = 1;
		for (int i = 0; i <= n; i++)
		{
			if (map[now][i] == -1) continue;
			if (dis[i] == -1 || dis[i]>dis[now] + map[now][i]) dis[i] = dis[now] + map[now][i];
		}
	}
	int q = 0, h = n*c / 2;
	while (q <= h)
	{
		int mid = q + h >> 1;
		ans = INF;	dfs(0, mid);
		if (ans != INF) h = mid - 1; else q = mid + 1;
	}
	printf("%d ", q);//需要运出的数量
	dfs(0, q);
	Dfs(s, ans, q);
	printf(" %d\n", ans);//需要运回的数量
	return 0;
}

PAT A 1018. Public Bike Management (30)【最短路径】的更多相关文章

  1. 1018. Public Bike Management (30)

    时间限制 400 ms 内存限制 65536 kB 代码长度限制 16000 B 判题程序 Standard 作者 CHEN, Yue There is a public bike service i ...

  2. PAT (Advanced Level) 1018. Public Bike Management (30)

    先找出可能在最短路上的边,图变成了一个DAG,然后在新图上DFS求答案就可以了. #include<iostream> #include<cstring> #include&l ...

  3. PAT 1018. Public Bike Management

    There is a public bike service in Hangzhou City which provides great convenience to the tourists fro ...

  4. PAT Public Bike Management (dfs)

    思路:你的答案必须满足三个条件: 1.在所有路径中选择最短的: 2.如果路径相等,则选择从PBMC中送出最少的: 3.如果路径相等且PBMC送出的车也相等,则选择带回最少的. 注意:这题很恶心,你要考 ...

  5. PAT 解题报告 1049. Counting Ones (30)

    1049. Counting Ones (30) The task is simple: given any positive integer N, you are supposed to count ...

  6. PAT 解题报告 1004. Counting Leaves (30)

    1004. Counting Leaves (30) A family hierarchy is usually presented by a pedigree tree. Your job is t ...

  7. PAT乙级 1018. 锤子剪刀布 (20)

    1018. 锤子剪刀布 (20) 时间限制 100 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 CHEN, Yue 大家应该都会玩“锤子剪刀布”的游 ...

  8. PAT 1034. Head of a Gang (30)

    题目地址:http://pat.zju.edu.cn/contests/pat-a-practise/1034 此题考查并查集的应用,要熟悉在合并的时候存储信息: #include <iostr ...

  9. PAT A 1119. Pre- and Post-order Traversals (30)【二叉树遍历】

    No.1119 题目:由前序后序二叉树序列,推中序,判断是否唯一后输出一组中序序列 思路:前序从前向后找,后序从后向前找,观察正反样例可知,前后序树不唯一在于单一子树是否为左右子树. 判断特征:通过查 ...

随机推荐

  1. 转 Android RadioButton设置选中时文字和背景颜色同时改变

    主要应用在购物车,像淘宝的那样,点击以后弹出一个选择种类颜色这样的popuwindow以后,然后这个选择种类的地方要用到类似这个玩意儿. 搜了一下,效果和这个文章一致.转了. 原文地址:http:// ...

  2. bzoj4498: 魔法的碰撞

    首先,如果排列确定,那么就可以组合学解决了,不过排列数很多,显然不能枚举. 我们发现如果区间不能重叠的话,总长度减去所有区间长度就是能用的多余格子数. 然而相邻区间可以重叠较小区间一半的长度,因此这些 ...

  3. Hyper-V 与Broadcom网卡兼容问题

    最近在测虚拟机时,碰到一个网卡和Hyper-V不兼容问题,现在共享给大家参考,希望对大家有帮忙. 故障描述: Dell R720 Windows 2012操作系统下的Hyper-V环境后,虚拟机网络速 ...

  4. AFNetworking之缓存篇

    苦苦看了我两天,最近后台为了减轻压力,要我做缓存,我说好吧...... 借鉴了别人的说法找到一张图可以看明白好多:       这个是我比较战成一种方案. 好了直接上代码了 首先我们要有自己缓存的类 ...

  5. Javascript、CSS和IMG之网页执行探索

    测试环境:windows/chrome 实例1:页面中仅有图片 <html xmlns="http://www.w3.org/1999/xhtml"> <head ...

  6. /proc/sysrq-trigger该文件能做些什么事情-转载

    /proc/sysrq-trigger该文件能做些什么事情呢? # 立即重新启动计算机 (Reboots the kernel without first unmounting file system ...

  7. ASP.NET MVC使用jQuery无刷新上传

    昨晚网友有下载了一个jQuery无刷新上传的小功能,他尝试搬至ASP.NET MVC应用程序中去,在上传死活无效果.Insus.NET使用Teamviewer远程桌面,操作一下,果真是有问题.网友是说 ...

  8. jquery实践案例--验证电子邮箱

    <input type="email" name="email" id="email" value="" onpa ...

  9. 关于#define预处理指令的一个问题

    背景:由于经常需要在远程服务端和测试服务端进行切换,所以将接口的地址定义为了一个预处理变量,例如 //#define APIDOMAIN @"http://10.0.0.2" #d ...

  10. WPF中的VisualTreeHelper

    VisualTreeHelper提供了一组WPF控件树模型,通过VisualTreeHelper可以遍历控件的树形结构,获取我们所需要的控件以及相应的属性: VisualTreeHelper提供了一下 ...