3624: [Apio2008]免费道路

Time Limit: 2 Sec Memory Limit: 128 MBSec Special Judge

Submit: 2143 Solved: 881

[Submit][Status][Discuss]

Description

Input

Output

Sample Input

5 7 2

1 3 0

4 5 1

3 2 0

5 3 1

4 3 0

1 2 1

4 2 1

Sample Output

3 2 0

4 3 0

5 3 1

1 2 1


先预处理全用水泥路能做到的联通状态

然后处理必须选那些鹅卵石道路才能生成树,这些边标记选择

再随便加有联通贡献鹅卵石路加到k条即可


#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
#define LL long long
using namespace std; int i,m,n,j,k,x,y,z,f[100001],c1,c2,bl[500001],cnt1,cnt2;
struct vv
{
int x,y;
} b[500001],w[500001]; int find(int x)
{
if(f[x]==x) return x;
f[x]=find(f[x]);
return f[x];
} int main()
{
scanf("%d%d%d",&n,&m,&k);
for(i=1;i<=n;i++) f[i]=i; for(i=1;i<=m;i++)
{
scanf("%d%d%d",&x,&y,&z);
if(z) { c1+=1; b[c1].x=x, b[c1].y=y;}
else {c2+=1; w[c2].x=x; w[c2].y=y;}
}
if(c2<k) {printf("no solution\n"); return 0;} for(i=1;i<=c1;i++) if(find(b[i].x)!=find(b[i].y)) f[f[b[i].x]]=f[b[i].y], cnt1+=1; if(cnt1<n-1-k) {printf("no solution\n"); return 0;} for(i=1;i<=c2;i++) if(find(w[i].x)!=find(w[i].y)) bl[i]=1, f[f[w[i].x]]=f[w[i].y], cnt2+=1; if(cnt1+cnt2!=n-1) {printf("no solution\n"); return 0;} for(i=1;i<=n;i++) f[i]=i; k-=cnt2; for(i=1;i<=c2;i++)
if(bl[i]) f[find(w[i].x)]=find(w[i].y);
else if(k && find(w[i].x)!=find(w[i].y)) bl[i]=1, f[f[w[i].x]]=f[w[i].y], k-=1; if(k) {printf("no solution\n"); return 0;} for(i=1;i<=c1;i++)
if(find(b[i].x)!=find(b[i].y))
{
printf("%d %d 1\n",b[i].x, b[i].y);
f[f[b[i].x]]=f[b[i].y];
}
for(i=1;i<=c2;i++) if(bl[i]) printf("%d %d 0\n",w[i].x,w[i].y);
}

P3623 [APIO2008]免费道路的更多相关文章

  1. 题解 Luogu P3623 [APIO2008]免费道路

    [APIO2008]免费道路 题目描述 新亚(New Asia)王国有 N 个村庄,由 M 条道路连接.其中一些道路是鹅卵石路,而其它道路是水泥路.保持道路免费运行需要一大笔费用,并且看上去 王国不可 ...

  2. 【luogu P3623 [APIO2008]免费道路】 题解

    题目链接:https://www.luogu.org/problemnew/show/P3623 说是对克鲁斯卡尔的透彻性理解 正解: 先考虑加入水泥路,然后再考虑加入剩下必须要加入的最少鹅卵石路. ...

  3. [火星补锅] 水题大战Vol.2 T2 && luogu P3623 [APIO2008]免费道路 题解

    前言: 如果我自己写的话,或许能想出来正解,但是多半会因为整不出正确性而弃掉. 解析: 这题算是对Kruskal的熟练运用吧. 要求一颗生成树.也就是说,最后的边数是确定的. 首先我们容易想到一个策略 ...

  4. [BZOJ3624][Apio2008]免费道路

    [BZOJ3624][Apio2008]免费道路 试题描述 输入 输出 输入示例 输出示例 数据规模及约定 见“输入”. 题解 第一步,先尽量加入 c = 1 的边,若未形成一个连通块,则得到必须加入 ...

  5. bzoj 3624: [Apio2008]免费道路 生成树的构造

    3624: [Apio2008]免费道路 Time Limit: 2 Sec  Memory Limit: 128 MBSec  Special JudgeSubmit: 111  Solved: 4 ...

  6. BZOJ 3624: [Apio2008]免费道路

    3624: [Apio2008]免费道路 Time Limit: 2 Sec  Memory Limit: 128 MBSec  Special JudgeSubmit: 1201  Solved:  ...

  7. [Apio2008]免费道路[Kruscal]

    3624: [Apio2008]免费道路 Time Limit: 2 Sec  Memory Limit: 128 MBSec  Special JudgeSubmit: 1292  Solved:  ...

  8. Kruskal算法及其类似原理的应用——【BZOJ 3654】tree&&【BZOJ 3624】[Apio2008]免费道路

    首先让我们来介绍Krukal算法,他是一种用来求解最小生成树问题的算法,首先把边按边权排序,然后贪心得从最小开始往大里取,只要那个边的两端点暂时还没有在一个联通块里,我们就把他相连,只要这个图里存在最 ...

  9. [APIO2008]免费道路

    [APIO2008]免费道路 BZOJ luogu 先把必须连的鹅卵石路连上,大于k条no solution 什么样的鹅卵石路(u,v)必须连?所有水泥路都连上仍然不能使u,v连通的必须连 补全到k条 ...

随机推荐

  1. 【转载&&干货】Noip应试技巧

    NOIP应试技巧 如何看待别人的经验? 我想大家都有台上的学长滔滔不绝,但是自己在台下漠不关心,或是老师考试前的叮嘱说完一会儿功夫就忘记了的经历吧.所以,有可能我接下来的所说的话,一到考场上就全部忘记 ...

  2. JS 重写alert,使之能输出多个参数

    windows._alert = windows.alert; windows.alert = function(){ _alert = (Array.prototype.slice(argument ...

  3. php5.6+apache2.4+linux搭建php环境

    前言 最近突然想搭建个人博客,尽管笔者擅长java-web,但综合各种原因,于是选择了大众化的php+mysql搭建个人博客.对于php,只闻其大名,但从未学过,于是,笔者将从php环境搭建开始,到服 ...

  4. Java8简明学习之Lambda表达式

    函数式接口 就是一个有且仅有一个抽象方法,但是可以有多个非抽象方法的接口,函数式接口可以被隐式转换为lambda表达式. 之前已有的函数式接口: java.lang.Runnable java.uti ...

  5. ArcGIS10.3+Oracle12C+ArcGIS Server10.3安装布署(之一)

    1.安装Oracle12C 2.配置Oracle12C的PDB监听(1)原始listener.ora文件 改为: (2)原始tnsnames.ora文件 改为: 3.连接Oracle12C的PDB数据 ...

  6. 如何选择分布式事务形态(TCC,SAGA,2PC,基于消息最终一致性等等)

    各种形态的分布式事务 分布式事务有多种主流形态,包括: 基于消息实现的分布式事务 基于补偿实现的分布式事务 基于TCC实现的分布式事务 基于SAGA实现的分布式事务 基于2PC实现的分布式事务 这些形 ...

  7. 一些不错的Android开源音视频播放器

    摘要:来自Github上的一点点整理,希望对你有用! 整理了一下Github上几个开源的音视频播放器项目,有兴趣的同学可以clone代码去研究学习. 1.UniversalMusicPlayer ht ...

  8. linux 命令及配置文件搜索命令which、whereis

    which /usr/bin/which 搜索命令所在目录及别名信息 which lsalias ls='ls --color=auto'/usr/bin/ls which rmalias rm='r ...

  9. Django Redis配合Mysql验证用户登录

    1.redis_check.py # coding:utf-8 import pymysql import redis import sys def con_mysql(sql): db = pymy ...

  10. python实现字符串中的半全角转换

    全角和半角的空格的Unicode值相差12256 除空格外的全角和半角的Unicode值相差65248 # -*- coding: utf-8 -*- def strQ2B(ustring): &qu ...