国王的烦恼

时间限制:3000 ms  |  内存限制:65535 KB
难度:2
描述

C国由n个小岛组成,为了方便小岛之间联络,C国在小岛间建立了m座大桥,每座大桥连接两座小岛。两个小岛间可能存在多座桥连接。然而,由于海水冲刷,有一些大桥面临着不能使用的危险。如果两个小岛间的所有大桥都不能使用,则这两座小岛就不能直接到达了。然而,只要这两座小岛的居民能通过其他的桥或者其他的小岛互相到达,他们就会安然无事。但是,如果前一天两个小岛之间还有方法可以到达,后一天却不能到达了,居民们就会一起发起抗议。

现在C国的国王已经知道了每座桥能使用的天数,超过这个天数就不能使用了。现在他想知道居民们一共会发起多少次抗议。

输入
  多组测试数据。

  每组数据先输入两个正整数n和m。

  接下来m行,每行三个整数a, b, t,分别表示该座桥连接a号和b号两个小岛,能使用t天。小岛的编号从1开始递增。(1≤n≤10000,1≤m≤100000,1<=a,b<=n,1≤t≤100000)
输出
  输出一个整数,表示居民们发起抗议的次数。
样例输入
4 4
1 2 2
1 3 2
2 3 1
3 4 3
样例输出
2
提示
对于样例:

第一天后2和3之间的桥不能使用,不影响。

第二天后1和2之间,以及1和3之间的桥不能使用,居民们会抗议。

第三天后3和4之间的桥不能使用,居民们会抗议。
来源
蓝桥杯
上传者

TC_李远航

/*unique,c++中的去重函数,返回值是数组末尾的地址,所以减去首地址是长度,
在这道题中,先将树建起来,然后去除天数相同的数据,因为只有树上的路径才会影响到
是否抗议,而天数相同的数据,视为抗议一次代码如下*/
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<iostream>
#include<algorithm>
using namespace std;
struct s
{
int u,v,w;
}edge[100100];
int pre[100100],a[100010];
void init(int n)
{
int i;
for(i=0;i<=n;i++)
pre[i]=i;
}
int cmp(s a,s b)
{
return a.w>b.w;
}
int find(int x)
{
if(x==pre[x])
return pre[x];
return pre[x]=find(pre[x]);
}
int main()
{
int n,m;
while(scanf("%d%d",&n,&m)!=EOF)
{
int i;
init(n);
for(i=0;i<m;i++)
{
scanf("%d%d%d",&edge[i].u,&edge[i].v,&edge[i].w);
}
sort(edge,edge+m,cmp);
int ans=0,cnt=0;
for(i=0;i<m;i++)
{
int fa=find(edge[i].u);
int fb=find(edge[i].v);
if(fa!=fb)
{
pre[fa]=fb;
a[cnt++]=edge[i].w;
}
}
ans=unique(a,a+cnt)-a;
printf("%d\n",ans);
}
}

国王的烦恼---nyoj的更多相关文章

  1. nyoj925_国王的烦恼_并查集

    国王的烦恼 时间限制:3000 ms  |  内存限制:65535 KB 难度:2   描述 C国由n个小岛组成,为了方便小岛之间联络,C国在小岛间建立了m座大桥,每座大桥连接两座小岛.两个小岛间可能 ...

  2. 算法笔记_180:历届试题 国王的烦恼(Java)

    目录 1 问题描述 2 解决方案   1 问题描述 问题描述 C国由n个小岛组成,为了方便小岛之间联络,C国在小岛间建立了m座大桥,每座大桥连接两座小岛.两个小岛间可能存在多座桥连接.然而,由于海水冲 ...

  3. NYOJ 925 国王的烦恼 (并查集)

    题目链接 描述     C国由n个小岛组成,为了方便小岛之间联络,C国在小岛间建立了m座大桥,每座大桥连接两座小岛.两个小岛间可能存在多座桥连接.然而,由于海水冲刷,有一些大桥面临着不能使用的危险.如 ...

  4. nyoj 925 国王的烦恼(最小生成树)

    /* 题意:N个城市中每两个城市有多条路径连接,可是因为路径存在的天数是有限的!以为某条路经不存在了 导致N个城市不能连通了,那么村名们就会抗议!问一共会有多少次抗议! 思路:最小生成树....我们用 ...

  5. NYOJ 925 国王的烦恼

    从最后一天开始往前加边. 同一天的边同时加到图上,加完之后检查集合数量是否和没加之前有变化. 有变化的话,答案就+1. #include<cstdio> #include <iost ...

  6. [蓝桥杯]PREV-22.历届试题_国王的烦恼

    问题描述 C国由n个小岛组成,为了方便小岛之间联络,C国在小岛间建立了m座大桥,每座大桥连接两座小岛.两个小岛间可能存在多座桥连接.然而,由于海水冲刷,有一些大桥面临着不能使用的危险. 如果两个小岛间 ...

  7. Java实现 蓝桥杯 历届试题 国王的烦恼

    问题描述 C国由n个小岛组成,为了方便小岛之间联络,C国在小岛间建立了m座大桥,每座大桥连接两座小岛.两个小岛间可能存在多座桥连接.然而,由于海水冲刷,有一些大桥面临着不能使用的危险. 如果两个小岛间 ...

  8. Zerojudge解题经验交流

    题号:a001: 哈囉 背景知识:输出语句,while not eof 题号:a002: 簡易加法 背景知识:输出语句,while not eof,加法运算 题号:a003: 兩光法師占卜術 背景知识 ...

  9. Java的类C结构体的实现,以及对类的某一属性进行排序

    public static class Foo { public int x1; public int x2; public int day; } public static Foo[] bridge ...

随机推荐

  1. 【python】os.getcwd和getcwdu

    print os.getcwd(), type(os.getcwd()) print os.getcwdu(), type(os.getcwdu()) 结果如下: C:\Users\Administr ...

  2. 终极解决VS2015 安装失败问题,如 安装包损坏或丢失

    1.去微软官网下载完成ISO镜像,最好不要在线安装, 打开官方链接 https://www.visualstudio.com/zh-cn/downloads/download-visual-studi ...

  3. MVC5+EasyUI+EF6+Linq通用权限系统出炉--登录(2)

    1.输入验证码后 自动识别验证码并登录.

  4. sturts2 回顾

    第一个简单的struts2例子: 1.  创建一个web project 2.  导入jar包 具体jar包在struts 的例子中的lib文件夹中copy

  5. Docker 数据卷重复挂载测试

    没想到一年没写博客了,这中间都是记在自己的笔记本上,大部分网上都有,这个好像没有,所以发上来吧! 本文是测试Docker容器(相同目录/父子目录)同时挂载到宿主机(同目录/不同目录)时的情况,废话少说 ...

  6. Linux 之secureCRT连接SSH

    1.登陆linux系统,打开终端命令.输入 rpm -qa |grep ssh 查找当前系统是否已经安装. 2.如果没有安装SSH软件包,可以通过yum  或rpm安装包进行安装. .3.安装好了之后 ...

  7. 关于vuex

    希望初学者可以初步理解vuex的日志: 示意图: 一.图例: 1.Vue Components:Vue组件.HTML页面上,负责接收用户操作等交互行为,执行dispatch方法触发对应action进行 ...

  8. BPM结束任务

    var pi = tw.system.findProcessInstanceByID("158");for(var i=0; i<pi.tasks.length; i++) ...

  9. eas之动态刷新Table

    如何刷新表体数据行(表头不变) 示例1:删除所有表体行,并重新发取数事件该方法不会修改原先的绑定信息table.removeRows(); 示例2:删除所有表体行,修改绑定信息并重新取数指定新的que ...

  10. nyoj51-管闲事的小明

    管闲事的小明 时间限制:4000 ms  |  内存限制:65535 KB 难度:2 描述 某校大门外长度为L的马路上有一排树,每两棵相邻的树之间的间隔都是1米.我们可以把马路看成一个数轴,马路的一端 ...