0
点赞
收藏
分享

微信扫一扫

国王的烦恼 蓝桥真题

 

逆向考虑 枚举每一天 看这一天是否有桥断掉 断掉是否影响联通即可

 

#include <bits/stdc++.h>
using namespace std;

struct node
{
int u;
int v;
int t;
};

node edge[100010];
int f[10010];
int n,m;

bool cmp(node n1,node n2)
{
return n1.t>n2.t;
}

int getf(int p)
{
if(f[p]==p) return p;
else
{
f[p]=getf(f[p]);
return f[p];
}
}

bool unite(int u,int v)
{
int fu,fv;
fu=getf(u);
fv=getf(v);
if(fu!=fv)
{
f[fv]=fu;
return true;
}
else return false;
}

int main()
{
int i,j,pre,ans,flag;
while(scanf("%d%d",&n,&m)!=EOF)
{
for(i=1;i<=m;i++)
{
scanf("%d%d%d",&edge[i].u,&edge[i].v,&edge[i].t);
}
sort(edge+1,edge+m+1,cmp);
for(i=1;i<=n;i++)
{
f[i]=i;
}
pre=1,ans=0;
for(i=100000;i>=1;i--)
{
flag=0;
for(j=pre;j<=m;j++)
{
if(edge[j].t!=i) break;
if(unite(edge[j].u,edge[j].v))
{
flag=1;
}
}
pre=j,ans+=flag;
}
printf("%d\n",ans);
}
return 0;
}

 

 

 


举报

相关推荐

0 条评论