DP/最短路 URAL 1741 Communication Fiend
- /*
- 题意:程序从1到n版本升级,正版+正版->正版,正版+盗版->盗版,盗版+盗版->盗版
- 正版+破解版->正版,盗版+破解版->盗版
- DP:每种情况考虑一遍,递推就行了
- 注意:开long long
- */
- #include <cstdio>
- #include <iostream>
- #include <algorithm>
- #include <cstring>
- #include <cmath>
- using namespace std;
- const int MAXN = 1e4 + ;
- const int INF = 0x3f3f3f3f;
- struct Node
- {
- int u, v, w;
- char s[];
- }node[MAXN];
- long long dp[MAXN][];
- bool cmp(Node x, Node y)
- {
- if (x.u == y.u) return x.v < y.v;
- return x.u < y.u;
- }
- int main(void) //URAL 1741 Communication Fiend
- {
- //freopen ("T.in", "r", stdin);
- int n, m;
- while (scanf ("%d%d", &n, &m) == )
- {
- for (int i=; i<=m; ++i)
- {
- scanf ("%d %d %d %s", &node[i].u, &node[i].v, &node[i].w, &node[i].s);
- }
- sort (node+, node++m, cmp);
- memset (dp, -, sizeof (dp));
- dp[][] = ;
- for (int i=; i<=m; ++i)
- {
- Node a = node[i];
- if (a.s[] == 'L')
- {
- if (dp[a.u][] != - && (dp[a.v][] == - || dp[a.v][] > dp[a.u][] + a.w))
- {
- dp[a.v][] = dp[a.u][] + a.w;
- }
- }
- else if (a.s[] == 'P')
- {
- if (dp[a.u][] != - && (dp[a.v][] == - || dp[a.v][] > dp[a.u][] + a.w))
- {
- dp[a.v][] = dp[a.u][] + a.w;
- }
- if (dp[a.u][] != - && (dp[a.v][] == - || dp[a.v][] > dp[a.u][] + a.w))
- {
- dp[a.v][] = dp[a.u][] + a.w;
- }
- }
- else if (a.s[] == 'C')
- {
- if (dp[a.u][] != - && (dp[a.v][] == - || dp[a.v][] > dp[a.u][] + a.w))
- {
- dp[a.v][] = dp[a.u][] + a.w;
- }
- if (dp[a.u][] != - && (dp[a.v][] == - || dp[a.v][] > dp[a.u][] + a.w))
- {
- dp[a.v][] = dp[a.u][] + a.w;
- }
- }
- }
- if (dp[n][] == - && dp[n][] == -) puts ("Offline");
- else
- {
- puts ("Online");
- if (dp[n][] == -) printf ("%I64d\n", dp[n][]);
- else if (dp[n][] == -) printf ("%I64d\n", dp[n][]);
- else printf ("%I64d\n", min (dp[n][], dp[n][]));
- }
- }
- return ;
- }
- /*
- Online
- Offline
- */
- /*
- WA了4,5发,第一是抄Kuangbin的模板抄错了;第二是选取的INF值太小了
- 以后学习一下最值的选取的方法:)
- */
- #include <cstdio>
- #include <iostream>
- #include <algorithm>
- #include <cstring>
- #include <vector>
- #include <cmath>
- #include <queue>
- using namespace std;
- const int MAXN = 1e4 + ;
- const int INF = 0x3f3f3f3f;
- const int INFF = 0x7fffffff;
- const long long inf = ((long long)<<);
- struct Edge
- {
- int v, w;
- int f;
- Edge (int _v = , int _w = , int _f = ) : v (_v), w (_w), f (_f) {}
- };
- bool vis[MAXN];
- int cnt[MAXN];
- long long d[MAXN][];
- vector<Edge> G[MAXN];
- int n, m;
- void add_edge(int u, int v, int w, int f)
- {
- G[u].push_back (Edge (v, w, f));
- }
- bool SPFA(int s)
- {
- memset (cnt, , sizeof (cnt));
- memset (vis, false, sizeof (vis));
- for (int i=; i<=n; ++i) d[i][] = d[i][] = inf;
- vis[s] = true; d[s][] = ; cnt[s] = ;
- queue<int> Q; Q.push (s);
- while (!Q.empty ())
- {
- int u = Q.front (); Q.pop ();
- vis[u] = false; //失误!
- for (int i=; i<G[u].size (); ++i)
- {
- int v = G[u][i].v; int w = G[u][i].w; int f = G[u][i].f;
- if (f == )
- {
- if (d[v][] > d[u][] + w) d[v][] = d[u][] + w;
- }
- else if (f == )
- {
- if (d[v][] > d[u][] + w) d[v][] = d[u][] + w;
- if (d[v][] > d[u][] + w) d[v][] = d[u][] + w;
- }
- else
- {
- if (d[v][] > d[u][] + w) d[v][] = d[u][] + w;
- if (d[v][] > d[u][] + w) d[v][] = d[u][] + w;
- }
- if (!vis[v])
- {
- vis[v] = true; Q.push (v);
- if (++cnt[v] > n) return true;
- }
- }
- }
- return false;
- }
- int main(void) //URAL 1741 Communication Fiend
- {
- //freopen ("T.in", "r", stdin);
- while (scanf ("%d%d", &n, &m) == )
- {
- for (int i=; i<=n; ++i) G[i].clear ();
- for (int i=; i<=m; ++i)
- {
- int u, v, w, f; char s[];
- scanf ("%d %d %d %s", &u, &v, &w, &s);
- if (s[] == 'L') f = ;
- else if (s[] == 'P') f = ;
- else if (s[] == 'C') f = -;
- add_edge (u, v, w, f);
- }
- if (!SPFA ())
- {
- long long ans = min (d[n][], d[n][]);
- if (ans == inf) puts ("Offline");
- else {puts ("Online"); printf ("%I64d\n", ans);}
- }
- }
- return ;
- }
- /*
- Online
- Offline
- */
SPFA
DP/最短路 URAL 1741 Communication Fiend的更多相关文章
- Ural 1741 Communication Fiend(隐式图+虚拟节点最短路)
1741. Communication Fiend Time limit: 1.0 second Memory limit: 64 MB Kolya has returned from a summe ...
- URAL 1741 Communication Fiend(最短路径)
Description Kolya has returned from a summer camp and now he's a real communication fiend. He spends ...
- URAL 1741 Communication Fiend
URAL 1741 思路: dp 状态:dp[i][1]表示到第i个版本为正版的最少流量花费 dp[i][0]表示到第i个版本为盗版的最少流量花费 初始状态:dp[1][0]=dp[0][0]=0 目 ...
- 1741. Communication Fiend(dp)
刷个简单的DP缓缓心情 1A #include <iostream> #include<cstdio> #include<cstring> #include< ...
- 旅游(CSUST省赛选拔赛2+状压dp+最短路)
题目链接:http://csustacm.com:4803/problem/1016 题目: 思路:状压dp+最短路,比赛的时候有想到状压dp,但是最短路部分写挫了,然后就卡死了,对不起出题人~dis ...
- NOIP2017逛公园(dp+最短路)
策策同学特别喜欢逛公园.公园可以看成一张N个点M条边构成的有向图,且没有 自环和重边.其中1号点是公园的入口,N号点是公园的出口,每条边有一个非负权值, 代表策策经过这条边所要花的时间. 策策每天都会 ...
- BZOJ.1003.[ZJOI2006]物流运输(DP 最短路Dijkstra)
题目链接 容易看出是个最短路+DP.既然答案和天数有关,那么就令\(f[i]\)表示前\(i\)天最小成本. 这个转移很好想: \(f[i]=\min(f[i],\ f[j]+cost(j+1,i)+ ...
- 2018.09.02 bzoj1003: [ZJOI2006]物流运输(dp+最短路转移)
传送门 dp好题. 每一天要变更路线一定还是走最短路. 所以l~r天不变更路线的最优方案就是把l~r天所有不能走的点都删掉再求最短路.显然是可以dp的. 设f[i]表示第i天的最优花销.那么我们枚举在 ...
- 1003. [ZJOI2006]物流运输【区间DP+最短路】
Description 物流公司要把一批货物从码头A运到码头B.由于货物量比较大,需要n天才能运完.货物运输过程中一般要转 停好几个码头.物流公司通常会设计一条固定的运输路线,以便对整个运输过程实施严 ...
随机推荐
- Mac OS X【快捷键组合】汇总
以下是可能会出现在 OS X 菜单中的修饰键符号: ⌘—— () ⌃ ——Control ⌥—— (alt) ⇧——Shift ⇪——Caps Lock fn——功能键就是fn 启动快捷键 按下按键 ...
- JVM<一>----------运行时数据区域
参考:1.JVM Specification: http://docs.oracle.com/javase/specs/jvms/se7/html/jvms-2.html#jvms-2.5 2.< ...
- Linux大神必备-文本编辑器
导读 我们在 Linux 上不缺乏非常现代化的编辑软件,但是它们都是基于 GUI(图形界面)的编辑软件.正如你所了解的:Linux 真正的魅力在于命令行,当你正在用命令行工作时,你就需要一个可以在控制 ...
- Unity模型导入的若干问题
原地址:http://tieba.baidu.com/p/2807225555 我觉得有三点感觉在导出时比较重要的1.单位的设置3dsmax系统单位设置就设成厘米显示单位公制也设成厘米这样在max里的 ...
- vundle安装 给vim插上翅膀
(这些文章都是从我的个人主页上粘贴过来的,大家也可以访问我的主页 www.iwangzheng.com) vundle安装方法如下 首先执行以下命令 $ git clone https://githu ...
- 重构edit 和 new页面
www.iwangzheng.com 由于edit和new页面的相似部分很多,需要提取出来,现在就是提取的方法 从form 的开始部分选中,shift+v选中对应的行 :Rextract form 然 ...
- Ubuntu下为Firefox安装Adobe Flash Player
使用环境: OS:Ubuntu 12.04 LTS Browser: Firefox 12.0 Adobe Flash Player: install_flash_play ...
- poj1789 Truck History
Truck History Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 20768 Accepted: 8045 De ...
- NOIP 2011 Day 1 部分题解 (Prob#1 and Prob#2)
Problem 1: 铺地毯 乍一看吓cry,地毯覆盖...好像是2-dims 线段树,刚开头就这么难,再一看,只要求求出一个点,果断水题,模拟即可.(注意从标号大的往小的枚举,只要有一块地毯符合要求 ...
- 用Python操纵MySQL
本例用Python操纵MySQL,从指定文件读取数据,并对数据进行处理,处理之后批量插入MySQL. 贴上代码: # -*- coding: gbk -*- import re import MySQ ...