CodeForces
来源:互联网 发布:淘宝认证应该注意事项 编辑:程序博客网 时间:2024/06/03 05:19
题目链接:http://codeforces.com/problemset/problem/449/B
题目大意:两个点之间可能是道路相连,也可能是铁路相连,问在不影响首都到其他城市的最短路径的前提下,最多可以删多少条铁路
解题思路:直接跑一遍Dijkstra,如果到某个点的最短路的前一条是铁路,那么标记一下,如果有相同长度的不是铁路的,就替换,如果是更短的铁路的,也替换
AC代码:
#include<cstdio>#include<queue>#include<cstring>using namespace std;const int Maxn = 4 * 100000 + 5;struct Edge{ int v, w, next,flag;//flag是铁路标记 Edge(int v=0,int w=0,int next=0,int flag=0):v(v),w(w),next(next),flag(flag){}}edge[Maxn<<1];struct Node{ int numb,dis; Node(int numb=0,int dis=0):numb(numb),dis(dis){} bool operator<(const Node& a)const { return dis > a.dis; }};int head[Maxn], edgnum;bool vis[Maxn], pre[Maxn];int dis[Maxn];int ans;void toInit(){ ans = 0; edgnum = 0; memset(vis, 0, sizeof(vis)); memset(head, -1, sizeof(head)); memset(pre, 0, sizeof(pre)); memset(dis, 0x3f, sizeof(dis));}void toAdd(int u,int v,int w,int flag){ edge[edgnum] = Edge(v, w, head[u], flag); head[u] = edgnum++;}void Dijs(int s){ priority_queue<Node> pqn; pqn.push(Node(s, 0)); dis[s] = 0; while (!pqn.empty()) { Node u = pqn.top();pqn.pop(); if (vis[u.numb]) continue; vis[u.numb] = 1; for (int i = head[u.numb];i != -1;i = edge[i].next) { int v = edge[i].v; if (u.dis + edge[i].w < dis[v]) { if (pre[v] == 1) { ans--; pre[v] = 0; } if (edge[i].flag == 1) { pre[v] = 1; ans++; } dis[v] = u.dis + edge[i].w; pqn.push(Node(v, dis[v])); } else if (u.dis + edge[i].w == dis[v] && pre[v] == 1 && edge[i].flag == 0) { ans--; pre[v] = 0; } } }}int main(){ toInit(); int n, m, k; scanf("%d%d%d", &n, &m, &k); while (m--) { int ui, vi, xi; scanf("%d%d%d", &ui, &vi, &xi); toAdd(ui, vi, xi, 0); toAdd(vi, ui, xi, 0); } for(int i=1;i<=k;++i) { int si, yi; scanf("%d%d", &si, &yi); toAdd(1, si, yi, 1); } Dijs(1); printf("%d\n", k-ans); return 0;}
阅读全文
0 0
- codeforces~~~
- Codeforces
- codeforces
- Codeforces
- codeforces
- codeforces
- Codeforces
- Codeforces
- CodeForces
- CodeForces
- CodeForces
- CodeForces
- CodeForces
- Codeforces
- Codeforces
- Codeforces
- Codeforces
- Codeforces
- 正则表达式匹配
- 如何快速删除QQ说说内容
- 设置miui状态栏黑白图标颜色
- appium改造思路
- hdu 6103 (尺取)
- CodeForces
- Unity学习推荐书籍
- 数据结构——二叉树(3)
- 如何在eclipse以外用浏览器新建一个Maven的SpringBoot项目
- 去掉shiro登录时url里的JSESSIONID
- STM 32 UART串口通信基本原理
- 理解本真的REST架构风格
- 为镜像添加SSH服务---Dockerfile创建
- 热备份、温备份、冷备份(Hot/Warm/Cold Backup)