¿ 我的P1525代码被迷你世界大玉吊打导致AC变成80分,求条
  • 板块灌水区
  • 楼主liwenbo_1919810
  • 当前回复2
  • 已保存回复2
  • 发布时间2024/8/4 19:53
  • 上次更新2024/8/4 21:00:46
查看原帖
¿ 我的P1525代码被迷你世界大玉吊打导致AC变成80分,求条
511657
liwenbo_1919810楼主2024/8/4 19:53
#include<bits/stdc++.h>
using namespace std;
const int N=1e5+10;
int e[N],h[N],ne[N],w[N],idx=0,n,m;
int st[N];

bool dfs1(int u,int color,int k)
{
	st[u]=color;
	for(int i=h[u];~i;i=ne[i])
	{
		int v=e[i],w1=w[i];
		if(w1>=k)
		{
			if(st[v]&&st[u]==st[v]) return false;
			if(st[v]&&st[u]==st[v]^1) continue;
			bool f=dfs1(v,color^1,k);
			if(!f) return false;
		}
	}
	return true;
} 

bool check(int k)
{
	memset(st,0,sizeof st);
	for(int i=1;i<=n;i++)
	{
		if(st[i]) continue;
		bool f=dfs1(i,2,k);
		if(!f) return false;
	}
	return true;
}

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

inline void write(int s)
{
	if(s<0) putchar('-'),s*=-1;
	if(s>9) write(s/10);
	putchar((s%10)^'0');
}

inline void add(int x,int y,int z)
{
	e[idx]=y,w[idx]=z,ne[idx]=h[x],h[x]=idx++;
}

int main()
{
	//freopen("P1525_2.in","r",stdin);
	int L=0,R=-0x3f;
	n=read(),m=read();
	memset(h,-1,sizeof h);
	for(int i=1;i<=m;i++)
	{
		int a=read(),b=read(),c=read();
		R=max(R,c);
		add(a,b,c),add(b,a,c);
	}
	R++;
	while(L+1<R)
	{
		int mid=(L+R)>>1;
		if(check(mid)) R=mid;
		else L=mid;
//		cout<<L<<" "<<R<<endl;
	}
	write(L);
	return 0;
}
2024/8/4 19:53
加载中...