DP/最短路 URAL 1741 Communication Fiend
题目传送门
1 /* 2 题意:程序从1到n版本升级,正版+正版->正版,正版+盗版->盗版,盗版+盗版->盗版 3 正版+破解版->正版,盗版+破解版->盗版 4 DP:每种情况考虑一遍,递推就行了 5 注意:开long long 6 */ 7 #include <cstdio> 8 #include <iostream> 9 #include <algorithm> 10 #include <cstring> 11 #include <cmath> 12 using namespace std; 13 14 const int MAXN = 1e4 + 10; 15 const int INF = 0x3f3f3f3f; 16 struct Node 17 { 18 int u, v, w; 19 char s[10]; 20 }node[MAXN]; 21 long long dp[MAXN][2]; 22 23 bool cmp(Node x, Node y) 24 { 25 if (x.u == y.u) return x.v < y.v; 26 return x.u < y.u; 27 } 28 29 int main(void) //URAL 1741 Communication Fiend 30 { 31 //freopen ("T.in", "r", stdin); 32 33 int n, m; 34 while (scanf ("%d%d", &n, &m) == 2) 35 { 36 for (int i=1; i<=m; ++i) 37 { 38 scanf ("%d %d %d %s", &node[i].u, &node[i].v, &node[i].w, &node[i].s); 39 } 40 sort (node+1, node+1+m, cmp); 41 42 memset (dp, -1, sizeof (dp)); 43 dp[1][0] = 0; 44 for (int i=1; i<=m; ++i) 45 { 46 Node a = node[i]; 47 if (a.s[0] == 'L') 48 { 49 if (dp[a.u][0] != -1 && (dp[a.v][0] == -1 || dp[a.v][0] > dp[a.u][0] + a.w)) 50 { 51 dp[a.v][0] = dp[a.u][0] + a.w; 52 } 53 } 54 else if (a.s[0] == 'P') 55 { 56 if (dp[a.u][0] != -1 && (dp[a.v][1] == -1 || dp[a.v][1] > dp[a.u][0] + a.w)) 57 { 58 dp[a.v][1] = dp[a.u][0] + a.w; 59 } 60 if (dp[a.u][1] != -1 && (dp[a.v][1] == -1 || dp[a.v][1] > dp[a.u][1] + a.w)) 61 { 62 dp[a.v][1] = dp[a.u][1] + a.w; 63 } 64 } 65 else if (a.s[0] == 'C') 66 { 67 if (dp[a.u][0] != -1 && (dp[a.v][0] == -1 || dp[a.v][0] > dp[a.u][0] + a.w)) 68 { 69 dp[a.v][0] = dp[a.u][0] + a.w; 70 } 71 if (dp[a.u][1] != -1 && (dp[a.v][1] == -1 || dp[a.v][1] > dp[a.u][1] + a.w)) 72 { 73 dp[a.v][1] = dp[a.u][1] + a.w; 74 } 75 } 76 } 77 78 if (dp[n][0] == -1 && dp[n][1] == -1) puts ("Offline"); 79 else 80 { 81 puts ("Online"); 82 if (dp[n][0] == -1) printf ("%I64d\n", dp[n][1]); 83 else if (dp[n][1] == -1) printf ("%I64d\n", dp[n][0]); 84 else printf ("%I64d\n", min (dp[n][0], dp[n][1])); 85 } 86 } 87 88 return 0; 89 } 90 91 /* 92 Online 93 Offline 94 */
1 /* 2 WA了4,5发,第一是抄Kuangbin的模板抄错了;第二是选取的INF值太小了 3 以后学习一下最值的选取的方法:) 4 */ 5 #include <cstdio> 6 #include <iostream> 7 #include <algorithm> 8 #include <cstring> 9 #include <vector> 10 #include <cmath> 11 #include <queue> 12 using namespace std; 13 14 const int MAXN = 1e4 + 10; 15 const int INF = 0x3f3f3f3f; 16 const int INFF = 0x7fffffff; 17 const long long inf = ((long long)1<<50); 18 struct Edge 19 { 20 int v, w; 21 int f; 22 Edge (int _v = 0, int _w = 0, int _f = 0) : v (_v), w (_w), f (_f) {} 23 }; 24 bool vis[MAXN]; 25 int cnt[MAXN]; 26 long long d[MAXN][2]; 27 vector<Edge> G[MAXN]; 28 int n, m; 29 30 void add_edge(int u, int v, int w, int f) 31 { 32 G[u].push_back (Edge (v, w, f)); 33 } 34 35 bool SPFA(int s) 36 { 37 memset (cnt, 0, sizeof (cnt)); 38 memset (vis, false, sizeof (vis)); 39 for (int i=1; i<=n; ++i) d[i][0] = d[i][1] = inf; 40 vis[s] = true; d[s][0] = 0; cnt[s] = 1; 41 42 queue<int> Q; Q.push (s); 43 while (!Q.empty ()) 44 { 45 int u = Q.front (); Q.pop (); 46 vis[u] = false; //失误! 47 for (int i=0; i<G[u].size (); ++i) 48 { 49 int v = G[u][i].v; int w = G[u][i].w; int f = G[u][i].f; 50 if (f == 0) 51 { 52 if (d[v][0] > d[u][0] + w) d[v][0] = d[u][0] + w; 53 } 54 else if (f == 1) 55 { 56 if (d[v][1] > d[u][0] + w) d[v][1] = d[u][0] + w; 57 if (d[v][1] > d[u][1] + w) d[v][1] = d[u][1] + w; 58 } 59 else 60 { 61 if (d[v][0] > d[u][0] + w) d[v][0] = d[u][0] + w; 62 if (d[v][1] > d[u][1] + w) d[v][1] = d[u][1] + w; 63 } 64 if (!vis[v]) 65 { 66 vis[v] = true; Q.push (v); 67 if (++cnt[v] > n) return true; 68 } 69 } 70 } 71 72 return false; 73 } 74 75 int main(void) //URAL 1741 Communication Fiend 76 { 77 //freopen ("T.in", "r", stdin); 78 79 while (scanf ("%d%d", &n, &m) == 2) 80 { 81 for (int i=1; i<=n; ++i) G[i].clear (); 82 for (int i=1; i<=m; ++i) 83 { 84 int u, v, w, f; char s[10]; 85 scanf ("%d %d %d %s", &u, &v, &w, &s); 86 if (s[0] == 'L') f = 0; 87 else if (s[0] == 'P') f = 1; 88 else if (s[0] == 'C') f = -1; 89 add_edge (u, v, w, f); 90 } 91 92 if (!SPFA (1)) 93 { 94 long long ans = min (d[n][0], d[n][1]); 95 if (ans == inf) puts ("Offline"); 96 else {puts ("Online"); printf ("%I64d\n", ans);} 97 } 98 } 99 100 return 0; 101 } 102 103 /* 104 Online 105 Offline 106 */
SPFA
转载于:https://www.cnblogs.com/Running-Time/p/4495633.html
DP/最短路 URAL 1741 Communication Fiend相关推荐
- luogu P4745 [CERC2017]Gambling Guide(期望DP + 最短路实现)
整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 P4745 [CERC2017]Gambling Guide(期望DP + 最短路实现) Weblin ...
- E:By Elevator or Stairs? CF595 DP最短路
题目链接 比赛的时候一看,这不是最短路吗,然后敲了一个最短路. 然后比赛完发现大家基本都写的dp,我真是个憨憨,dp3行 最短路就建个简单的图,dp就是从上一维转化过来就是了 优秀的dp: //#pr ...
- 1003. [ZJOI2006]物流运输【区间DP+最短路】
Description 物流公司要把一批货物从码头A运到码头B.由于货物量比较大,需要n天才能运完.货物运输过程中一般要转 停好几个码头.物流公司通常会设计一条固定的运输路线,以便对整个运输过程实施严 ...
- 洛谷2149 Elaxia的路线(dp+最短路)
QwQ好久没更新博客了,颓废了好久啊,来补一点东西 题目大意 给定两个点对,求两对点间最短路的最长公共路径. 其中\(n,m\le 10^5\) 比较简单吧 就是跑四遍最短路,然后把最短路上的边拿出来 ...
- 最短路计数(dp+最短路)
Description 给出一个 n 个顶点 m 条边的无向无权图,顶点编号为 1 到 n. 问从顶点 1 开始,到其他每个点的最短路有几条. Input 第一行 2 个正整数 n, m ( 1 ≤ ...
- [bzoj3875][DP][最短路]骑士游戏
Description [故事背景] 长期的宅男生活中,JYY又挖掘出了一款RPG游戏.在这个游戏中JYY会 扮演一个英勇的骑士,用他手中的长剑去杀死入侵村庄的怪兽. [问题描述] 在这个游戏中,JY ...
- 【BZOJ】1003: [ZJOI2006]物流运输trans(SPFA+DP)
http://www.lydsy.com/JudgeOnline/problem.php?id=1003 这题一开始看是不会的额,,,还是看题解了..一开始我觉得不能用最短路啥的,,看了题解发现这是d ...
- NOIP 好题推荐(DP+搜索+图论)POJ ZOJ
NOIP好题推荐(DP+搜索+图论)POJ ZOJ 1370 Gossiping (数论->模线性方程有无解的判断)+(图论->DFS) 1090 Chain ->格雷码和二进制码 ...
- [kuangbin]各种各样的题单
[kuangbin]各种各样的题单 专题1 简单搜索 POJ 1321 POJ 2251 POJ 3278 POJ 3279 POJ 1426 POJ 3126 POJ 3087 POJ 3414 F ...
- 【学习笔记】《概率与期望全家桶》(ACM / OI)概率与期望 / 概率论知识小结
整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 这块知识很少,但是题很难- 目录 0x00 概率 0x01 基本概念 0x02 古典概率 0x03 条 ...
最新文章
- 证书过期--app审核提示90034证书错误
- access和SQL的区别
- hdu--1075--字典树||map
- lamda获取参数集合去空_JAVA集合框架知识
- [js] 使用delete删除数组,其长度会改变吗
- 定时任务 Scheduled quartz
- 编程入门先学什么python-编程零基础应当如何开始学习 Python?
- 云上的消费你真的算清楚了?
- DIY实用工具——看看大神手下的示波器
- c语言程序设计超市会员卡管理系统,C语言程序设计课程设计报告超市水果信息管理系统...
- 物联网项目开发实战案例
- win10睡眠只是关掉显示器的问题
- 钉钉OA流程审批,Jenkins自动授权通知用户密码
- 7-3 水仙花数(20 分) (20 分)(PTA Python版本)
- Android程序员接下来的路该如何走?
- 2019年最新Java和Java工程师发展现状解析,了解一下?
- 什么是外键,外键的作用
- JQuery中的动画效果
- deepinv2 添加打印机_如何在Deepin 20下安装brother打印机驱动及设置网络打印机?...
- 虚拟机linux系统硬盘扩容设置
热门文章
- [流行偶像]分析王菲唱腔的精辟文字(转载)
- 陈式太极拳式名考释、动作、着法要领说明
- 使用aiop实现事件等待模式
- XML 中大于等于小于等于的写法
- poj 1284 Primitive Roots 求素数元根数
- 使用智遥工作流,优化SAP请购流程
- 程序员如何更好的提升自己
- vue按住shift键多选(以element框架的table为例)
- postgresql 优势
- 我的世界服务器反作弊不起作用,[优化][反作弊]NeverLag——优化性能、防作弊、修复MC漏洞、限制刷物品[1.6.4-1.8.7]...