广大暑假训练1 E题 Paid Roads(poj 3411) 解题报告
题目链接:http://poj.org/problem?id=3411
题目意思:N个city 由 m 条路连接,对于一条路(假设连接Cityia和 Cityb),如果从Citya 去 Cityb的途中,之前已经走过Cityc(可能会等于a),那么就可以交p的钱,否则之前未走过Cityc,就一定要交r 的路费啦。
注意,一个点可以被反复多次走,也就是可能构成环,虽然路走长了,但路费便宜了,这个问题要考虑到。还有就是剪枝啦:如果当前求得的路费比以前求得的答案要大,那就要回溯。
mincost 明明是全局变量,多手在main里又重新声明,搞了我1个多小时才发现 = =....
#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <cstring>
using namespace std; const int maxn = + ;
int head[maxn];
int point_vis[maxn];
int N, m, mincost; struct adjlist // 邻接表
{
int b, c, p, r;
int next;
}node[maxn]; void dfs(int next, int cost)
{
if (point_vis[next] > N || cost >= mincost) // 某一点被经过的次数多于N 或者当前cost比之前求出的minsum要大就回溯
return;
if (next == N)
{
mincost = cost;
return;
}
for (int i = head[next]; i != -; i = node[i].next)
{
int v = node[i].b;
point_vis[node[i].b]++;
if (point_vis[node[i].c] >= ) // 之前这个中间点c有访问过,就可以交纳在点c的费用p
dfs(node[i].b, cost+node[i].p);
else // 之前该点木有走过,只能乖乖交 r 这个费用了
dfs(node[i].b, cost+node[i].r);
point_vis[node[i].b]--;
}
} int main()
{
while (scanf("%d%d", &N, &m) != EOF)
{
int t1, cnt = ;
memset(head, -, sizeof(head));
for (int i = ; i < m; i++)
{
scanf("%d", &t1);
node[cnt].next = head[t1];
scanf("%d%d%d%d", &node[cnt].b, &node[cnt].c, &node[cnt].p, &node[cnt].r);
head[t1] = cnt++;
}
memset(point_vis, , sizeof(point_vis));
mincost = maxn;
point_vis[]++;
dfs(, );
if (mincost == maxn)
printf("impossible\n");
else
printf("%d\n", mincost);
}
return ;
}
广大暑假训练1 E题 Paid Roads(poj 3411) 解题报告的更多相关文章
- Paid Roads POJ - 3411
A network of m roads connects N cities (numbered from 1 to N). There may be more than one road conne ...
- Codeforces Round #378 (Div. 2) D题(data structure)解题报告
题目地址 先简单的总结一下这次CF,前两道题非常的水,可是第一题又是因为自己想的不够周到而被Hack了一次(或许也应该感谢这个hack我的人,使我没有最后在赛后测试中WA).做到C题时看到题目情况非常 ...
- 【第40套模拟题】【noip2011_mayan】解题报告【map】【数论】【dfs】
目录:1.潜伏者 [map] 2.Hankson的趣味题[数论]3.mayan游戏[dfs] 题目: 1. 潜伏者(spy.pas/c/cpp)[问题描述]R 国和S 国正陷入战火之中,双方都互派间谍 ...
- 【模拟题(电子科大MaxKU)】解题报告【树形问题】【矩阵乘法】【快速幂】【数论】
目录: 1:一道简单题[树形问题](Bzoj 1827 奶牛大集会) 2:一道更简单题[矩阵乘法][快速幂] 3:最简单题[技巧] 话说这些题目的名字也是够了.... 题目: 1.一道简单题 时间1s ...
- 2018年暑假ACM个人训练题9(动态规划)解题报告
A:m段最大字段和问题 https://www.cnblogs.com/yinbiao/p/9314528.html B:map的使用(根本就不是dp!!!) https://www.cnblogs. ...
- 【leetCode百题成就】Gas Station解题报告
题目: There are N gas stations along a circular route, where the amount of gas at station i is gas[i]. ...
- hrbustoj 1494(原题UVA 315 Network) 解题报告 tarjan求割点
主要思路:使用tarjan选取一个根节点建立一个棵搜索树,判断一个点是割点的充分必要条件是,对于一个节点u如果他的孩子节点v的low值大于等于u的出生日期dfn值,进行下一步判断,如果u是我们选的根节 ...
- 多次访问节点的DFS POJ 3411 Paid Roads
POJ 3411 Paid Roads Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 6553 Accepted: 24 ...
- 暑假训练round 3 题解
今天做题运气出奇的好,除了几处小错误调试之后忘记改掉了……最后还AK了……虽然题目不难,学长也说是福利局,但是对个人的鼓励作用还是挺大的……至此暑假训练就结束了,也算没有遗憾……. 题解如下: Pro ...
随机推荐
- 洛谷 [P2953] 牛的数字游戏
SG搜索 n的范围在可以接受的范围内,SG搜索即可 #include <iostream> #include <cstdio> #include <cstring> ...
- net8:简易的文件磁盘管理操作一(包括文件以及文件夹的编辑创建删除移动拷贝重命名等)
原文发布时间为:2008-08-07 -- 来源于本人的百度文章 [由搬家工具导入] using System;using System.Data;using System.Configuration ...
- Error处理: “非法字符: \65279”的解决办法
将eclipse项目转为maven项目的时候,编译时遇到 “非法字符: \65279”的报错. 出错内容是: *.java:1: 非法字符: \65279 [javac] package com ...
- Maven单元测试
// SKU码:系列前3位+6位年月日+3位序号(自动生产,取数据库中当天最大的,没有就赋值位001) // 订单编号:BRD+6位年月日+5位序号 // // 退单号:BRT+6位年月日+3位序号 ...
- openSUSE Leap 15.0 初始配置
添加源: # 禁用原有软件源 sudo zypper mr -da # 添加阿里镜像源 sudo zypper ar -fc https://mirrors.aliyun.com/opensuse/d ...
- 2017 ACM/ICPC Asia Regional Urumuqi Online 记录
比赛题目链接 Urumuqi
- P1339 热浪Heat Wave 洛谷
https://www.luogu.org/problem/show?pid=1339 题目描述 The good folks in Texas are having a heatwave this ...
- JDBC自定义连接池
开发中,"获得连接"和"释放资源"是非常消耗系统资源的,为了解决此类性能问题可以采用连接池技术来共享连接Connection. 1.概述 用池来管理Connec ...
- Spring实战Day7面向切面编程术语介绍
#### 面向切面编程 为什么需要切面? 有些功能需要在应用中的多个地方使用到,但是我们又不想在着每个地方都调用他们 切面术语 通知(advice):切面需要完成的工作 通知的类型(什么时间完成工作) ...
- java内部类理解使用
这是我学习Java内部类的笔记 1.为什么使用内部类?使用内部类最吸引人的原因是:每个内部类都能独立地继承一个(接口的)实现,所以无论外围类是否已经继承了某个(接口的)实现,对于内部类都没有影响1.1 ...