题目传送门

 /*
题意:程序从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的更多相关文章

  1. Ural 1741 Communication Fiend(隐式图+虚拟节点最短路)

    1741. Communication Fiend Time limit: 1.0 second Memory limit: 64 MB Kolya has returned from a summe ...

  2. URAL 1741 Communication Fiend(最短路径)

    Description Kolya has returned from a summer camp and now he's a real communication fiend. He spends ...

  3. URAL 1741 Communication Fiend

    URAL 1741 思路: dp 状态:dp[i][1]表示到第i个版本为正版的最少流量花费 dp[i][0]表示到第i个版本为盗版的最少流量花费 初始状态:dp[1][0]=dp[0][0]=0 目 ...

  4. 1741. Communication Fiend(dp)

    刷个简单的DP缓缓心情 1A #include <iostream> #include<cstdio> #include<cstring> #include< ...

  5. 旅游(CSUST省赛选拔赛2+状压dp+最短路)

    题目链接:http://csustacm.com:4803/problem/1016 题目: 思路:状压dp+最短路,比赛的时候有想到状压dp,但是最短路部分写挫了,然后就卡死了,对不起出题人~dis ...

  6. NOIP2017逛公园(dp+最短路)

    策策同学特别喜欢逛公园.公园可以看成一张N个点M条边构成的有向图,且没有 自环和重边.其中1号点是公园的入口,N号点是公园的出口,每条边有一个非负权值, 代表策策经过这条边所要花的时间. 策策每天都会 ...

  7. BZOJ.1003.[ZJOI2006]物流运输(DP 最短路Dijkstra)

    题目链接 容易看出是个最短路+DP.既然答案和天数有关,那么就令\(f[i]\)表示前\(i\)天最小成本. 这个转移很好想: \(f[i]=\min(f[i],\ f[j]+cost(j+1,i)+ ...

  8. 2018.09.02 bzoj1003: [ZJOI2006]物流运输(dp+最短路转移)

    传送门 dp好题. 每一天要变更路线一定还是走最短路. 所以l~r天不变更路线的最优方案就是把l~r天所有不能走的点都删掉再求最短路.显然是可以dp的. 设f[i]表示第i天的最优花销.那么我们枚举在 ...

  9. 1003. [ZJOI2006]物流运输【区间DP+最短路】

    Description 物流公司要把一批货物从码头A运到码头B.由于货物量比较大,需要n天才能运完.货物运输过程中一般要转 停好几个码头.物流公司通常会设计一条固定的运输路线,以便对整个运输过程实施严 ...

随机推荐

  1. dedecms如何随机调用指定分类下的文章到网站首页

    dedecms是全静态的,有时会因为其他事情好几天没写文章推荐到首页,那样对se不是很友好.原本ytkah是想在网站首页上半部分调用几篇id从200到500的文章随机展示的,这样每次更新首页给se的赶 ...

  2. C语言内存对齐详解(2)

    接上一篇:C语言内存对齐详解(1) VC对结构的存储的特殊处理确实提高CPU存储变量的速度,但是有时候也带来了一些麻烦,我们也屏蔽掉变量默认的对齐方式,自己可以设定变量的对齐方式.VC 中提供了#pr ...

  3. 在VMware上面安装Solaris 10

    导读 Oracle Solaris 11 是世界上最先进的企业操作系统,提供安全.速度.简单的企业云环境和DevOps.在这篇文章中我们将使用Solaris 10版本,但您可以按照同样的步骤,来安装刚 ...

  4. 图像特征提取:Sobel边缘检测

    前言 点和线是做图像分析时两个最重要的特征,而线条往往反映了物体的轮廓,对图像中边缘线的检测是图像分割与特征提取的基础.文章主要讨论两个实际工程中常用的边缘检测算法:Sobel边缘检测和Canny边缘 ...

  5. Pascal’s Triangle

    vector<vector<int>> generate(int num) { vector<vector<int>> result; vector&l ...

  6. Linux Apache 怎么修改工作模式

    Apache默认为prefork模式,主要是考虑到稳定性的原因. 要切换到worker模式,则需要登录到linux上,进行如下操作: 进入/usr/sbin目录 cd /usr/sbin 将当前的pr ...

  7. NYOJ 5 字符串处理 find()函数应用

    http://acm.nyist.net/JudgeOnline/problem.php?pid=5 #include<stdio.h> #include<iostream> ...

  8. 2模02day1题解

    源文件在我的网盘上.链接:http://pan.baidu.com/s/1qWPUDRm 密码:k52e (只有机智的人才能看到我的链接) 机智的双重下划线~~~ T1 T1就是一个递推,这题目把我恶 ...

  9. 用Matplotlib绘制二维图像

    唠叨几句: 近期在做数据分析,需要对数据做可视化处理,也就是画图,一般是用Matlib来做,但Matlib安装文件太大,不太想直接用它,据说其代码运行效率也很低,在网上看到可以先用Java做数据处理, ...

  10. iOS中的NSTimer 和 Android 中的Timer

    首先看iOS的, Scheduling Timers in Run Loops A timer object can be registered in only one run loop at a t ...