题目传送门

 /*
题意:程序从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. JSONKit 简单使用

    http://blog.csdn.net/l_ch_g/article/details/8477187 例子上写的比较浅显易懂, 不过我还是稍微总结一下: 导入JSONKit.h之后 字符串转NSDi ...

  2. Controller之间传递数据:属性传值

    在项目中,Controller之间传递数据非常之多,这里简单介绍一下属性传值.例如有FirstController 和 SecondController,数据从First传递到Second中,我们如何 ...

  3. linux使用技巧

    <1>vim /etc/hosts.deny sshd : 192.168.0.25 :deny              //ssh拒绝某ip或网段访问.(原理详见鸟哥基础版18章P56 ...

  4. vim实用技巧

    <1> 删除空格: :% s/ //gi    #正则为一个空格,替换为空,全局匹配. <2> 删除空行: :g /^\n*$/ d  #g为global  正则为:行开始+换 ...

  5. ECharts2.2.0 兼容IE8

    IE 8,ECharts2.2.0 版本,demo的各个功能均正常显示在IE8上面, 但是我在真正做的时候,我的html却不能显示,画面乱了,而且function也不能用, 都准备用1.4.1版本了, ...

  6. JavaScript toFixed()使用的注意事项

    以下是w3school的定义: 定义和用法 toFixed() 方法可把 Number 四舍五入为指定小数位数的数字. 语法 NumberObject.toFixed(num) 参数 描述 num 必 ...

  7. 71 Query Rank Min Max Successor of BST

    [本文链接] http://www.cnblogs.com/hellogiser/p/query-min-max-successor-of-bst.html [代码]  C++ Code  12345 ...

  8. 转MYSQL学习(四) 查询

    MySQL中select的基本语法形式: select 属性列表 from 表名和视图列表 [where 条件表达式] [group by 属性名[having 条件表达式]] [order by 属 ...

  9. codeforces 485B Valuable Resources 解题报告

    题目链接:http://codeforces.com/problemset/problem/485/B 题目意思:需要建造一个正方形的city,这座city的边需要满足平行于 x 轴和 y 轴,而且这 ...

  10. WebSocket技术

    webSocket技术 在html5技术革新中,加入了WebSocket技术 1.webSocket实际是TCP连接 webSocket在最初将发送http连接请求到服务器端, 但是在header中加 ...