Codeforces Round #257 (Div. 2) D
来源:互联网 发布:服务器装centos 编辑:程序博客网 时间:2024/05/18 13:30
D. Jzzhu and Cities
题意:n个城市,首都在城市1,城市之间有n条公路和k条铁路(铁路一端必为首都)连接。问最多能够撤掉多少条铁路,使得首都到所有城市的最短路不增加。
思路:这个题我用了各种方法,比如先用公路求最短路,然后贪心加入铁路,不是WA就是TLE。。然后看了别人的题解,方法是跑一遍最短路(优先选择公路),记录每个点的前驱边,统计有多少条边是铁路。
#include <iostream>#include <stdio.h>#include <string>#include <map>#include <vector>#include <stack>#include <queue>#include <string.h>#include <algorithm>using namespace std;#define ll long longconst int MAXN=200010;const ll INF=200000000000010LL;struct Edge{int v;int len;bool type;Edge(int v,int len,bool type):v(v),len(len),type(type){}Edge(){}}edge[800010];struct Node{int u;ll d;bool operator<(const Node& n)const{return d>n.d;}Node(int u,int d):u(u),d(d){}};ll dist[MAXN];int pre[MAXN];int head[400010];int next[800010];bool vis[MAXN];void bfs(int s,int dis){priority_queue<Node> que;que.push(Node(s,dis));dist[s]=dis;while(!que.empty()){Node cur=que.top(); que.pop();if(vis[cur.u])continue;vis[cur.u]=1;for(int i=head[cur.u];~i;i=next[i]){if(dist[cur.u]+edge[i].len<dist[edge[i].v]){dist[edge[i].v]=dist[cur.u]+edge[i].len;que.push(Node(edge[i].v,dist[cur.u]+edge[i].len));pre[edge[i].v]=i;}else if(dist[cur.u]+edge[i].len==dist[edge[i].v]&&dist[edge[i].v]){pre[edge[i].v]=i;}}}}int pos;void addedge(int u,int v,int w,int type){edge[pos]=Edge(v,w,type);next[pos]=head[u];head[u]=pos++;}int main(){memset(head,-1,sizeof(head)); pos=0;int n,m,k;cin>>n>>m>>k;for(int i=1;i<=n;i++)dist[i]=INF;for(int i=0;i<m;i++){int u,v,w;scanf("%d%d%d",&u,&v,&w);addedge(u,v,w,0);addedge(v,u,w,0);}for(int i=0;i<k;i++){int v,w;scanf("%d%d",&v,&w);addedge(1,v,w,1);}int ans=0;bfs(1,0);for(int i=2;i<=n;i++){ans+=edge[pre[i]].type;}ans=k-ans;cout<<ans<<endl;return 0;}
0 0
- Codeforces Round #257 (Div. 2) D
- Codeforces Round #257 (Div. 2) D. Jzzhu and Cities
- Codeforces Round #257 (Div. 2) A/B/C/D
- Codeforces Round #103 (Div. 2) D
- Codeforces Round #104 (Div. 2) D
- Codeforces Round #105 (Div. 2) D
- Codeforces Round #139 (Div. 2) D. Snake
- Codeforces Round #155 (Div. 2) D-rats
- Codeforces Round #159 (Div. 2) D sum
- Codeforces Round #184 (Div. 2) D、E
- Codeforces Round#186(Div 2) D
- codeforces Round # 187(Div.2) D
- Codeforces Round #191 (Div. 2) D
- Codeforces Round #194 (Div. 2) D. Chips
- Codeforces Round #209 (Div. 2) <A-D>
- Codeforces Round #218 (Div. 2) D. Vessels
- Codeforces Round #231 (Div. 2)A-D
- Codeforces Round #139 (Div. 2) D. Snake
- Unity3D地形创建
- CentOS更改yum源与更新系统
- 微信公众平台开发:初体验
- 在Java中实现浮点数的精确计算
- SSH框架总结(框架分析+环境搭建+实例源码下载)
- Codeforces Round #257 (Div. 2) D
- Android 根据坐标获取控件方法
- Google Protocol Buffer 的使用和原理(IBM)
- EXE加载DLL文件
- fatal error LNK1169: 找到一个或多个多重定义的符号
- 链接库(sqlserver—>mysql)
- 使用常量数组简化算法
- DiskView:图形化显示每个文件在硬盘上的物理位置
- Apache之.htaccess备忘录(二)