玄关,30pts求调
查看原帖
玄关,30pts求调
547787
__Refine__楼主2024/11/1 19:42
#include<bits/stdc++.h>

using namespace std;

struct bian
{
	int nxt,to,zhi;
}b[200001];
int dian[20002],tot,co[20002];
int n,m,maxv;
bool cmp(bian x,bian y)
{
	return x.zhi<y.zhi;
}
inline void add(int x,int y,int z)
{
	b[++tot].nxt=dian[x];
	b[tot].to=y;
	b[tot].zhi=z;
	dian[x]=tot;
}
bool dfs(int x,int fa,int c,int s)
{
	co[x]=c;
	for(int i=dian[x];i;i=b[i].nxt)
	{
		if(b[i].zhi<s) continue;
		if(co[b[i].to]){
			if(co[b[i].to]==c) return false;
		}
		else if(!dfs(b[i].to,x,c%2+1,s))
		{
			return false;
		}
	}
	return true;
}
inline bool check(int x)
{
	memset(co,0,sizeof(co));
	for(int i=1;i<=n;i++)
	{
		if(!co[i])
		{
			if(!dfs(i,0,1,x)) return false;
		}
	}
	return true;
}
int main()
{
	cin>>n>>m;
	for(int i=1;i<=m;i++)
	{
		int x,y,z;
		scanf("%d%d%d",&x,&y,&z);
		add(x,y,z);
		add(y,x,z);
		maxv=max(maxv,z);
	 }
	int l=1,r=maxv;
	while(l<r)
	{
		int mid=(l+r)>>1;
		if(!check(mid)) l=mid;
		else r=mid-1;
	}
	cout<<l;
	return 0;
}
```cpp
2024/11/1 19:42
加载中...