比赛 |
EYOI常规赛 3rd & 新年特辑 |
评测结果 |
AAAAAAAAAA |
题目名称 |
虫洞排序 |
最终得分 |
100 |
用户昵称 |
nick |
运行时间 |
0.733 s |
代码语言 |
C++ |
内存使用 |
0.00 MiB |
提交时间 |
2022-01-04 21:32:36 |
显示代码纯文本
#include<bits/stdc++.h>
#define ll long long
const int N=100010;
using namespace std;
int n,m,a[N],fa[N],ans=-1;
struct Edge{int a,b,w;}e[N];
int father(int x)
{
if (fa[x]==x) return fa[x];
fa[x]=father(fa[x]);
return fa[x];
}
bool cmp(Edge x, Edge y){return x.w>y.w;}
int main()
{
freopen("usaco_Jan_wormsort.in","r",stdin);
freopen("usaco_Jan_wormsort.out","w",stdout);
cin>>n>>m;
for(int i=1;i<=n;i++)fa[i]=i,cin>>a[i];
for(int i=1;i<=m;i++)cin>>e[i].a>>e[i].b>>e[i].w;
sort(e+1,e+m+1,cmp);
int ptr=1;
for(int i=1;i<=m;i++)
{
while(father(ptr)==father(a[ptr])){ptr++;if(ptr>n)goto abcd;}
int x=father(e[i].a);
int y=father(e[i].b);
if(x!=y)fa[x]=fa[y];
ans=e[i].w;
}
abcd:;
cout<<ans<<endl;
return 0;
}