悬关,求调!!!
查看原帖
悬关,求调!!!
673962
lzs18637466689楼主2024/12/16 20:48
#include <bits/stdc++.h>

using  namespace  std;

const  int  N = 20005, M = 1e6 + 10;

int h[N], e[M], ne[M], w[M], idx;
int n, m;
int l, r;

void  add(int a, int b, int c)
{
	e[idx] = b, ne[idx] = h[a], w[idx] = c; h[a] = idx ++;
}

bool  dfs(int mid)
{
	queue <int> q;
	int color[20010] = {0};
	for(int i = 1; i <= n; i ++)
	{
		if(!color[i])
		{
			q.push(i);
			color[i] = 1;
			while(!q.empty())
			{
				int x = q.front();
				q.pop();
				for(int  i = h[x];i != -1; i = ne[i])
				{
					int j = e[i];
					if(w[i] >= mid)
					{
						if(!color[j])
						{
							q.push(j);
							if(color[x] == 1)
								color[j] = 2;
							else  color[j] = 1;		
						} 
					else if(color[j] == color[x]) return  false;
					}
				}
			}
		}
	}
	return  true;
}

int  main()
{
	cin >> n >> m;
	while(m --)
	{
		int a, b, c;
		cin >> a >> b >> c;
		add(a, b, c);
		add(b, a, c);
	}

	while(l < r)
	{
		int mid = (l + r) >> 1;
		if(dfs(mid)) r = mid;
		else l = mid + 1;
	}
	cout << l << endl;
	return  0;
}
2024/12/16 20:48
加载中...