不知道为什么MLE和TLE了
查看原帖
不知道为什么MLE和TLE了
153956
QingzhiStar楼主2021/11/6 16:53
#include<bits/stdc++.h>
using namespace std;

#define MAXN 20010

int n,m;
int edge[MAXN][MAXN];

int color[MAXN];
#define WHITE 1
#define BLACK 2
#define reverseColor(x) (x%2+1)

list<int> prepare;
bool check(int budgit)
{
    prepare.clear();
    memset(color,0,sizeof(color));

    color[1]=WHITE;
    prepare.push_back(1);

    while(prepare.size())
    {
        int item=prepare.front();
        prepare.pop_front();

        for(int i=1;i<=n;++i)
        {
            if(edge[item][i]>=budgit)
            {
                if(!color[i])
                {
                    color[i]=reverseColor(color[item]);
                    prepare.push_back(i);
                }
                else if(color[i]==color[item])return false;
            }
        }
    }
    return true;
}

int main()
{
    cin>>n>>m;
    int maxEdge=-1;
    for(int i=1;i<=m;++i)
    {
        int x,y,z;
        cin>>x>>y>>z;
        edge[x][y]=edge[y][x]=z;
        maxEdge=max(maxEdge,z);
    }

    int l=0,r=maxEdge+1,budgit=0;
    while(l+1<r)
    {
        budgit=l+r>>2;
        if(check(budgit))r=budgit;
        else l=budgit;
    }
    cout<<l;
    return 0;
}
2021/11/6 16:53
加载中...