题目:https://www.luogu.org/problemnew/show/P1525

二分答案,二分图染色判断是否可行。

代码如下:

#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
int n,m,ct,head[20005],ans,mx,mid;
bool col[20005],vis[20005];
struct N{
int to,next,w;
}edge[200005];
void add(int x,int y,int z)
{
ct++;
edge[ct].to=y;
edge[ct].next=head[x];
edge[ct].w=z;
head[x]=ct;
}
bool dfs(int x)
{
for(int i=head[x];i;i=edge[i].next)
{
int u=edge[i].to;
if(edge[i].w<=mid)continue;
if(!vis[u])
{
col[u]=!col[x];
vis[u]=1;
if(dfs(u))return 1;
}
else if(vis[u]&&col[u]==col[x])return 1;
}
return 0;
}
void per(int l,int r)
{
if(l>=r)//=!
{
ans=l;
return;
}
memset(col,0,sizeof col);
memset(vis,0,sizeof vis);
mid=(l+r)/2;
bool flag=0;
for(int i=1;i<=n;i++)
if(!vis[i])
{
vis[i]=1;col[i]=1;
if(dfs(i))
{
flag=1;
break;
}
}
if(flag)per(mid+1,r);
else per(l,mid);
}
int main()
{
scanf("%d%d",&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);//无向边
mx=max(mx,z);
}
per(0,mx);
printf("%d",ans);
return 0;
}

  

最新文章

  1. TinkPad E40 CentOS 6.5 无线网卡驱动 RTL8191SEvB 安装
  2. Lambda 表达式[MSDN]
  3. 配置ntp服务
  4. ModuleWorks免费下载使用方法大全
  5. form表单 无法提交js动态添加的表单元素问题。。
  6. scala知识点(一)
  7. 04斐波那契函数_Fibonacci--(栈与队列)
  8. 从修复 testerhome(rubychina)网站的一个 bug 学习 ruby&amp;rails on ruby
  9. HW5.17
  10. vijosP1067Warcraft III 守望者的烦恼
  11. python——BS解析器
  12. hdu 2051 Bitset (java)
  13. 批处理删除IIS的everyone、users的访问权限
  14. 【转载】JavaScript继承详解(二)
  15. Chrome 开发者工具断点调试(视频教程)
  16. 数据攻略●R语言自述
  17. BBS+Blog项目开发
  18. 53-java中的queue
  19. P1914 一串字母
  20. LIght OJ 1179

热门文章

  1. firfox浏览器常用快捷键
  2. 嵌入式开发之davinci--- 8148/8168/8127 中的xdc 简介
  3. Android应用开发:网络工具——Volley(二)
  4. inclusion_tag 看图
  5. 九度OJ 1045:百鸡问题 (基础题)
  6. RPM包的使用
  7. lasso the moon
  8. cocos2d-js添加360广告联盟插屏(通过jsb反射机制)
  9. 深入了解Cookie(1)------selenium2进行Cookie操作的前奏
  10. BCH硬分叉,BitcoinABC强势逆袭BitcoinSV