cf 507E. Breaking Good
因为要求是在保证最短路的情况下花费是最小的,所以(先保证最短路设为S吧)
那么花费就是最短路上的新建边条数A+剩余拆掉边的条数B,而且总的原有好的边是一定的,所以,只要使得A尽量小,那么B就大,所以要拆掉的边也会少啦。
所以SPFA以最短路为基础,维护出一个A最小就好。(路径什么的,,from[...])
#include<bits/stdc++.h>
#define INF 0x7fffffff
#define inf 0x3f3f3f3f
#define LL long long
#define N 100005
using namespace std;
inline LL ra()
{
LL x=,f=; char ch=getchar();
while (ch<'' || ch>'') {if (ch=='-') f=-; ch=getchar();}
while (ch>='' && ch<='') {x=x*+ch-''; ch=getchar();}
return x*f;
}
struct node{
int from,to,next,z;
}e[N<<];
int sum[N<<],dis[N<<],head[N<<],cnt;
int q[N<<],tot1,n,m,from[N<<];
bool vis[N<<],inq[N<<];
void insert(int x, int y, int z)
{
e[cnt].to=y;
e[cnt].from=x;
e[cnt].next=head[x];
e[cnt].z=z;
head[x]=cnt++;
}
void SPFA()
{
for (int i=; i<=n; i++) sum[i]=dis[i]=inf;
sum[]=dis[]=; q[]=; int l=,r=; from[]=-;
while (l<=r)
{
int x=q[l++];
for (int i=head[x];i!=-;i=e[i].next)
{
if (dis[e[i].to]==dis[x]+ && e[i].z==)
{
if (sum[e[i].to]>sum[x]+)
{
sum[e[i].to]=sum[x]+;
from[e[i].to]=i;
if (!inq[e[i].to])
{
q[r++]=e[i].to;
inq[e[i].to]=;
}
}
}
if (dis[e[i].to]==dis[x]+ && e[i].z)
{
if (sum[e[i].to]>sum[x])
{
sum[e[i].to]=sum[x];
from[e[i].to]=i;
if (!inq[e[i].to])
{
q[r++]=e[i].to;
inq[e[i].to]=;
}
}
}
if (dis[e[i].to]>dis[x]+)
{
dis[e[i].to]=dis[x]+;
from[e[i].to]=i;
if (e[i].z==) sum[e[i].to]=sum[x]+;
else sum[e[i].to]=sum[x];
if (!inq[e[i].to])
{
inq[e[i].to]=;
q[r++]=e[i].to;
}
}
}
inq[x]=;
}
// cout<<dis[n];while (1);
}
void print()
{
cout<<sum[n]+(tot1-(dis[n]-sum[n]))<<endl;
int i=from[n];
while (i!=-)
{
if (e[i].z==)
printf("%d %d 1\n",e[i].from,e[i].to);
else vis[i]=;
i=from[e[i].from];
}
for (int i=; i<=cnt; i++)
{
if (e[i].z== && vis[i]== && vis[i^]==)
{
vis[i]=;
printf("%d %d 0\n",e[i].from,e[i].to);
}
}
}
int main()
{
n=ra(); m=ra();
memset(head,-,sizeof(head));
for (int i=; i<=m; i++)
{
int x=ra(),y=ra(),z=ra();
if (z==) tot1++;
insert(x,y,z); insert(y,x,z);
}
SPFA();
print();
return ;
}
cf 507E. Breaking Good的更多相关文章
- CodeForces 507E Breaking Good 2维权重dij
Breaking Good 题解: 2维权重dij, 先距离最短, 后改变最小. 在这个题中, 如果要改变最小, 则让更多的可用边放进来. 然后可以用pre存下关键边. 代码: ...
- [Codeforces 507E] Breaking Good
[题目链接] https://codeforces.com/contest/507/problem/E [算法] 首先BFS求出1到其余点的最短路 , N到其余点的最短路,记为distA[]和dist ...
- 【codeforces 507E】Breaking Good
[题目链接]:https://vjudge.net/contest/164884#problem/D [题意] 给你一张图; 图中有些路是完好的;但有些路还没修好; 先不管路有没有修好; 问你从起点到 ...
- CF习题集二
CF习题集二 一.CF507E Breaking Good 题目描述 \(Breaking Good\)这个游戏对于有经验的玩家来说也有一定的难度. 游戏的主角小明希望加入一个叫斧头帮的犯罪团伙.这个 ...
- ORA-00494: enqueue [CF] held for too long (more than 900 seconds) by 'inst 1, osid 5166'
凌晨收到同事电话,反馈应用程序访问Oracle数据库时报错,当时现场现象确认: 1. 应用程序访问不了数据库,使用SQL Developer测试发现访问不了数据库.报ORA-12570 TNS:pac ...
- cf之路,1,Codeforces Round #345 (Div. 2)
cf之路,1,Codeforces Round #345 (Div. 2) ps:昨天第一次参加cf比赛,比赛之前为了熟悉下cf比赛题目的难度.所以做了round#345连试试水的深浅..... ...
- cf Round 613
A.Peter and Snow Blower(计算几何) 给定一个点和一个多边形,求出这个多边形绕这个点旋转一圈后形成的面积.保证这个点不在多边形内. 画个图能明白 这个图形是一个圆环,那么就是这个 ...
- ARC下OC对象和CF对象之间的桥接(bridge)
在开发iOS应用程序时我们有时会用到Core Foundation对象简称CF,例如Core Graphics.Core Text,并且我们可能需要将CF对象和OC对象进行互相转化,我们知道,ARC环 ...
- [Recommendation System] 推荐系统之协同过滤(CF)算法详解和实现
1 集体智慧和协同过滤 1.1 什么是集体智慧(社会计算)? 集体智慧 (Collective Intelligence) 并不是 Web2.0 时代特有的,只是在 Web2.0 时代,大家在 Web ...
随机推荐
- unity3d Asset Store下载的资源在哪?
win7 C:\Users\(用户名)\AppData\Roaming\Unity\Asset Store\ 用户名为中文的时候,是不能直接在unity3d中打开的.
- Mac如何升级自带的vim
brew install vim --with-lua --with-override-system-vi brew install macvim --with-lua --with-override ...
- UDP打洞实验
依云 posted @ 2 年前 in 网络 with tags python 网络 socat UDP , 7095 阅读 本文来自依云's Blog,转载请注明. 两台没有外网 IP.在 NAT ...
- STM32学习笔记:为什么使用外部中断要打开syscfg时钟?
AFIO时钟只是在STM32F1系列里被提及. 对于32F1系列,涉及到管脚的EXTI. REMAP.事件输出时就需要开启AFIO时钟. 比方上面提到的管脚REMAP,必须先开AFIO时钟.配置EXT ...
- pygame库的学习
第一天:我学习了如何设置窗口和加载图片,以及加载音乐.这个库真的很有意思啊,打算py课设就拿这个写了. 代码: import pygamefrom sys import exit pygame.ini ...
- P1068 万绿丛中一点红
P1068 万绿丛中一点红 转跳点:
- springboot学习3事务控制
springboot学习3事务控制 spring的事务控制本质上是通过aop实现的. 在springboot中使用时,可以通过注解@Transactional进行类或者方法级别的事务控制,也可以自己通 ...
- 主机ping虚拟机失败。虚拟机ping主机,可以ping通。
原文:https://blog.csdn.net/ww1473345713/article/details/51490525 今天打开虚拟机,然后用Xshell远程连接,发现连接不上.按照以下顺序检查 ...
- Oracle自动备份bat
很多时候我们需要自动备份数据库这边推荐bat+Windows计划任务实现 方案1 创建以下bat 然后添加到TaskSchedule(路径最好不要包含中文) @echo off @echo ===== ...
- Word 写论文的一些教训和经验
参考文献 写正文时就在引用位置添加参考文献的title,写完后,在百度学术或谷歌学术中搜索参考文献获取GB/T 7714的参考格式,在参考文献的章节为文献编号,在引用位置插入交叉引用. 插图 可以先在 ...