因为要求是在保证最短路的情况下花费是最小的,所以(先保证最短路设为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的更多相关文章

  1. CodeForces 507E Breaking Good 2维权重dij

    Breaking Good 题解:         2维权重dij, 先距离最短, 后改变最小.   在这个题中, 如果要改变最小, 则让更多的可用边放进来. 然后可以用pre存下关键边.   代码: ...

  2. [Codeforces 507E] Breaking Good

    [题目链接] https://codeforces.com/contest/507/problem/E [算法] 首先BFS求出1到其余点的最短路 , N到其余点的最短路,记为distA[]和dist ...

  3. 【codeforces 507E】Breaking Good

    [题目链接]:https://vjudge.net/contest/164884#problem/D [题意] 给你一张图; 图中有些路是完好的;但有些路还没修好; 先不管路有没有修好; 问你从起点到 ...

  4. CF习题集二

    CF习题集二 一.CF507E Breaking Good 题目描述 \(Breaking Good\)这个游戏对于有经验的玩家来说也有一定的难度. 游戏的主角小明希望加入一个叫斧头帮的犯罪团伙.这个 ...

  5. 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 ...

  6. cf之路,1,Codeforces Round #345 (Div. 2)

     cf之路,1,Codeforces Round #345 (Div. 2) ps:昨天第一次参加cf比赛,比赛之前为了熟悉下cf比赛题目的难度.所以做了round#345连试试水的深浅.....   ...

  7. cf Round 613

    A.Peter and Snow Blower(计算几何) 给定一个点和一个多边形,求出这个多边形绕这个点旋转一圈后形成的面积.保证这个点不在多边形内. 画个图能明白 这个图形是一个圆环,那么就是这个 ...

  8. ARC下OC对象和CF对象之间的桥接(bridge)

    在开发iOS应用程序时我们有时会用到Core Foundation对象简称CF,例如Core Graphics.Core Text,并且我们可能需要将CF对象和OC对象进行互相转化,我们知道,ARC环 ...

  9. [Recommendation System] 推荐系统之协同过滤(CF)算法详解和实现

    1 集体智慧和协同过滤 1.1 什么是集体智慧(社会计算)? 集体智慧 (Collective Intelligence) 并不是 Web2.0 时代特有的,只是在 Web2.0 时代,大家在 Web ...

随机推荐

  1. 1-7SpringBoot之表单验证@Valid

    SpringBoot提供了强大的表单验证功能实现,给我们省去了写验证的麻烦: 这里我们给下实例,提交一个有姓名和年龄的表单添加功能, 要求姓名不能为空,年龄必须是不小于18 : 我们先新建一个Stud ...

  2. 让Nutz支持最快的模板引擎Smarty4j

    Smarty4j是一个开源的模板引擎.没错,它就是著名的php模板引擎之Java移植版. 它特点就是将模板文件或者字符串编译成java类直接执行,所以效率比一般的模板解释的方式处理要快.它发展较晚,所 ...

  3. JuJu团队1月7号工作汇报

    JuJu团队1月7号工作汇报 JuJu 周六周日放假,所以空了两天~   Scrum 团队成员 今日工作 剩余任务 困难 飞飞 完成data process readme部分 实现三维Dense 无 ...

  4. Wpa_supplicant 调试故障原因分析

    背景 在使用Wpa_supplicant 工具调试Linux的wifi的时候,发现有一些问题.特此记录一下.有些问题是遇到的并已经有了解决方法,一些问题比较发杂,只能作为思路. 问题以及解决办法 1. ...

  5. 变相降价的iPhone,能挽救苹果在中国的命运吗?

    人无千日好,花无百样红.当年iPhone的横空出世不仅开辟了智能手机时代,还间接导致了诺基亚.黑莓等手机品牌的没落.十余年来,苹果凭借iPhone活得风光无限,并成为全球首个市值超万亿美元的公司.但进 ...

  6. log4j 功能说明

    log4j 是一个非常强大的日志工具,应用于很多开源项目的.具体有以下几种功能: 定制不同输出的级别:ALL > TRACE > DEBUG > INFO > WARN > ...

  7. Educational Codeforces Round 65 选做

    好久没更博客了,随便水一篇 E. Range Deleting 题意 给你一个长度为 \(n\) 的序列 \(a_1,a_2,\dots a_n\) ,定义 \(f(l,r)\) 为删除 \(l\le ...

  8. mysql 分组查询入门

  9. 《从Lucene到Elasticsearch全文检索实战》的P184页

    curl -XPOST "http://localhost:9200/_bulk?pretty" --data-binary @books.json 这句话在书中是以crul的命令 ...

  10. mongodb单机版的安装和配置

    首先根据操作系统下载MongoDB的相关安装文件 下载后上传到linux上,解压 将解压后的文件夹重新命名为monggodb4.0.1 命令mv 配置必要的文件夹mgdata存放运行数据,mglog存 ...