RE9个点,悬关
  • 板块灌水区
  • 楼主YQD_Q
  • 当前回复0
  • 已保存回复0
  • 发布时间2024/7/5 11:52
  • 上次更新2024/7/5 14:35:10
查看原帖
RE9个点,悬关
1274368
YQD_Q楼主2024/7/5 11:52

大佬帮孩子看看吧,除了#1都RE了P1525

#include <bits/stdc++.h>//only my railgun
#define int long long
using namespace std;
const int AC=1e6;
const int INF=1e18;
int n,m,k,head[AC*2],fa[AC*2],dr[AC*2];
struct st{
	int u,v,w;
}e[AC*4];

inline void blyy(){
	/*
	dr[i]表示第i个人的敌人是谁 
	*/
}

inline int read()
{
	int x=0,f=1;char ch=getchar();
	while (ch<'0'||ch>'9'){if (ch=='-') f=-1;ch=getchar();}
	while (ch>='0'&&ch<='9'){x=x*10+ch-48;ch=getchar();}
	return x*f;
}

inline void adde(int u,int v,int w){
	e[++k].u=u;
	e[k].v=v;
	e[k].w=w;
}

inline bool cmp(st x,st y){
	return x.w>y.w;
}

inline int find(int sop){
	if(fa[sop]==sop) return sop;
	return fa[sop]=find(fa[sop]);
}

inline int kwdr(int a,int b){
	fa[find(a)]=find(b);
}

signed main(){
	//freopen("P1525_2.in","r",stdin);
	n=read();m=read();
	for(int i=1;i<=AC*2;i++) fa[i]=i;
	for(int i=1;i<=m;i++){
		int u,v,w;
		u=read();v=read();w=read();
		adde(u,v,w);
	}
	sort(e+1,e+1+m,cmp);
//	cout<<"\n\n\n\n\n\n\n";for(int i=1;i<=m;i++) cout<<e[i].u<<' '<<e[i].v<<' '<<e[i].w<<endl;
	for(int i=1;i<=k;i++){
		const int u=e[i].u,v=e[i].v;
		int x=find(u),y=find(v);
		if(x==y){
			cout<<e[i].w;
			return 0;
		}
		else{
			if(dr[u]==0/*此时u没有任何敌人*/){
				dr[u]=v;//v是u的敌人 
			}
			else kwdr(dr[u],v);//把敌人归为一类 
			if(dr[v]==0/*此时v没有任何敌人*/){
				dr[v]=u;//u是v的敌人 
			}
			else kwdr(dr[v],u);
		}
	}
	cout<<0; 
}

2024/7/5 11:52
加载中...