Luogu P1525 关押罪犯

Posted zhu-chen

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Luogu P1525 关押罪犯相关的知识,希望对你有一定的参考价值。

题目链接

思路

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

注意易错点:

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
";
            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
";
                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
";
            L=mid+1;
        }
    }
//  cout<<L<<" "<<mid<<" "<<R<<endl;
    cout<<L<<endl;
    return 0;
}

以上是关于Luogu P1525 关押罪犯的主要内容,如果未能解决你的问题,请参考以下文章

Luogu P1525 关押罪犯

洛谷P1525关押罪犯——二分做法

洛谷P1525关押罪犯——并查集

洛谷——P1525 关押罪犯

洛谷 P1525 关押罪犯 题解

P1525 关押罪犯 并查集