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天才能运完.货物运输过程中一般要转 停好几个码头.物流公司通常会设计一条固定的运输路线,以便对整个运输过程实施严 ...
随机推荐
- cocos基础教程(5)数据结构介绍之cocos2d::Map<K,V>
1.概述 cocos2d::Map<K,V> 是一个内部使用了 std::unordered_map的关联容器模版. std::unordered_map 是一个存储了由key-value ...
- 微信公众平台开发(十) 消息回复总结——用其xml模板
一.简介 微信公众平台提供了三种消息回复的格式,即文本回复.音乐回复和图文回复,在这一篇文章中,我们将对这三种消息回复的格式做一下简单讲解,然后封装成函数,以供读者使用. 二.思路分析 对于每一个PO ...
- Nginx安装与配置文件解析
导读 Nginx是一款开放源代码的高性能HTTP服务器和反向代理服务器,同时支持IMAP/POP3代理服务,是一款自由的软件,同时也是运维工程师必会的一种服务器,下面我就简单的说一下Nginx服务器的 ...
- reverse array java
/* package whatever; // don't place package name! */ import java.util.*; import java.lang.*; import ...
- BZOJ 1002 [ FJOI 2007 ]
-------------------------萌萌哒分割线------------------------- 题目很容易看懂,数据范围也不大.当然可以卡过暴力的人了. 在n=1时很明显是一种,如下 ...
- PHP中冒号、endif、endwhile、endfor这些都是什么
我们经常在wordpress一类博客程序的模板里面看到很多奇怪的PHP语法,比如:<?php if(empty($GET_['a'])): ?><font color="r ...
- vim实用技巧
<1> 删除空格: :% s/ //gi #正则为一个空格,替换为空,全局匹配. <2> 删除空行: :g /^\n*$/ d #g为global 正则为:行开始+换 ...
- 【云计算】开源的Docker Registry WebUI
kwk/docker-registry-frontend Code Issues 9 Pull requests 6 Wiki ...
- 7.python模块补充
此文章是对上节文章模块的补充 一,xml模块 xml是实现不同语言或程序之间进行数据交换的协议,可扩展标记语言,标准通用标记语言的子集,是一种用于标记电子文件使其具有结构性的标记语言.xml的格式如下 ...
- HTML标签自定义属性(转)
HTML标签可以自定义属性 HTML标签可以自定义属性,但是我们要考虑其在IE.Firefox以及chrome下的兼容性问题.例如: <div id="newTest" my ...