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 ...
随机推荐
- 全程2分钟!教你如何免费下载Windows 10
全程2分钟!教你如何免费下载Windows 10 2014-10-02 08:40:59 来源:pconline 原创 作者:唐山居人 责任编辑:caoweiye (评论314条) 终于在 ...
- 最新版本GIT安装
版本问题,最直接的解决办法就是重新编辑安装git吧: 1. 下载:# wget -O git.zip https://github.com/git/git/archive/master.zip 2. ...
- ss性能
ss是Socket Statistics的缩写.顾名思义,ss命令可以用来获取socket统计信息,它可以显示和netstat类似的内容.但ss的优势在于它能够显示更多更详细的有关TCP和连接状态的信 ...
- 全面理解Java中的String数据类型
1. 首先String不属于8种基本数据类型,String是一个对象. 因为对象的默认值是null,所以String的默认值也是null:但它又是一种特殊的对象,有其它对象没有的一些特性. 2. ne ...
- java 搭积木
搭积木 小明最近喜欢搭数字积木, 一共有10块积木,每个积木上有一个数字,0~9. 搭积木规则: 每个积木放到其它两个积木的上面,并且一定比下面的两个积木数字小. 最后搭成4层的金字塔形,必须用完所有 ...
- 洛谷 P3435 [POI2006]OKR-Periods of Words
题目传送门 解题思路: 这道题题面比较乱,先说一下这道题要求什么: 对于一个字符串,求它及它的所有前缀的一个答案串的长度之和,答案串就是对于一个字符串,找到一个它的一个前缀,这个前缀后面在复制一遍,得 ...
- SQL state [72000]; error code [1461]; ORA-01461: 仅能绑定要插入 LONG 列的 LONG 值 ; nested exception is java.sql.BatchUpdateException: ORA-01461: 仅能绑定要插入 LONG 列的 LONG 值
本文转自 https://www.cnblogs.com/yingsong/p/5685790.html 原 因:某一个字段本为varchar2(1024),但是实际要插入的值超过varchar2允 ...
- python里的def 方法中->代表什么意思?
功能注释 函数注释是关于用户定义函数使用的类型的完全可选元数据信息(请参阅PEP 3107和 PEP 484了解更多信息). 注释__annotations__ 作为字典存储在函数的属性中,对函数的任 ...
- CSS:导航栏下拉菜单模板
<!DOCTYPE html><html> <head> <meta charset="utf-8"> ...
- ASP.NETCore -----导出Excel文件并下载
本事例分为nopi(安装DotNetCore.NPOI)下载和EPPlus(EPPlus.Core.dll)下载,其中npoi下载演示的是根据执行的模板进行数据下载 npoi帮助类NpoiExcelU ...