码迷,mamicode.com
首页 > 其他好文 > 详细

Luogu P1525 关押罪犯

时间:2019-09-30 09:25:58      阅读:71      评论:0      收藏:0      [点我收藏+]

标签:node   二分图染色   check   class   href   简单的   链接   int   注意   

题目链接

思路

不想写了。。一个二分答案+二分图染色的水题蓝题竟然写了我四十分钟

注意易错点:

1.因为我在染色时用的的是dfs,所以有冲突时不能简单的return而要用一个全局变量记录是否有过冲突

2.二分害人啊。。。多测几组数据吧

Code

#include<bits/stdc++.h>
using namespace std;
const int MAXN=2e5+10;
int read()
{
    int f=1,a=0;
    char ch=getchar();
    while(ch<'0'||ch>'9'){
        if(ch=='-'){
            f=-f;
        }
        ch=getchar();
    }
    while(ch>='0'&&ch<='9'){
        a=a*10+ch-'0';
        ch=getchar();
    }
    return a*f;
}
struct node{
    int to,next,w;
}edge[MAXN];

int color[MAXN],head[MAXN];
int n,m,L,R,cnt,mid;
bool flag;
void addedge(int x,int y,int w)
{
    edge[++cnt].to=y;
    edge[cnt].w=w;
    edge[cnt].next=head[x];
    head[x]=cnt;
}

void dfs(int x,int col)
{
//  cout<<"x="<<x<<" col="<<col<<endl;
    color[x]=col;
    for(int i=head[x];i;i=edge[i].next){
        int y=edge[i].to;
        if(edge[i].w<=mid||color[y]==3-col) continue;
        if(col==color[y]){
//          cout<<"fail1\n";
            flag=1;
            return;
        }
        dfs(y,3-col);
        if(flag)    return;
    }
}

bool check()
{
    memset(color,0,sizeof(color)),flag=0;
    for(int i=1;i<=n;++i){
        if(color[i]==0){
            dfs(i,1);
            if(flag){
//              cout<<"fail2\n";
                return 0;
            }
        }
    }
    return 1;
}

int main()
{
//  freopen("test.in","r",stdin);
//  freopen(".out","w",stdout);
    n=read(),m=read();
    for(int i=1;i<=m;i++){
        int a=read(),b=read(),c=read();
        R=max(R,c);
        addedge(a,b,c);
        addedge(b,a,c);
    }
    R++;
    while(L<R){
//      puts("midfind");
        mid=(L+R)>>1;       
//      cout<<L<<" "<<mid<<" "<<R<<endl;

        if(check()){
            R=mid;
        }else{
//          cout<<"fail3\n";
            L=mid+1;
        }
    }
//  cout<<L<<" "<<mid<<" "<<R<<endl;
    cout<<L<<endl;
    return 0;
}

Luogu P1525 关押罪犯

标签:node   二分图染色   check   class   href   简单的   链接   int   注意   

原文地址:https://www.cnblogs.com/zhu-chen/p/11610915.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!