Luogu P1525 deteniendo criminales (juicio de dos puntos + dos puntos)

Inserte la descripción de la imagen aquí
Idea: el
cerebro no es muy sobrio. . .
Hay dos cárceles para estos internos, y luego tendrá un efecto si las dos áreas en conflicto están en la misma prisión. C yo c_i Ahora le permite generar el valor mínimo del impacto máximo.
Nuestra respuesta dicotómica: valor de impacto máximo re re , es decir, los prisioneros mayores que este valor máximo definitivamente serán encarcelados en dos prisiones diferentes. re re Hay un límite entre los dos prisioneros de , y estos dos presos definitivamente pertenecerán a dos prisiones diferentes (conjunto de puntos), si re re factible, entonces definitivamente se formará un gráfico bipartito, por lo que usamos el método de teñido para juzgar si es un gráfico bipartito y así determinar si el esquema es factible.

struct Edge{
    int next;
    int to;
    int dis;
}edge[N<<1];
int head[N<<1],tot;
inline void add(int from,int to,int dis){
    edge[++tot].next = head[from];
    edge[tot].to = to;
    edge[tot].dis = dis;
    head[from] = tot;
}
int color[N];
bool dfs(int x,int d){
    bool r = 1;
    for(int i = head[x];i;i = edge[i].next){
        int y = edge[i].to;
        int dis = edge[i].dis;
        if(dis > d){
            if(color[y] == 0) {color[y]=color[x]==1?2:1;r = dfs(y,d);if(r==0) return false;}
            else if(color[y] == color[x]) return false;
        }
    }
    return true;
}
bool ok(int m,int n){
    memset(color,0,sizeof color);
    rep(i,1,n){
        if(!color[i]) {
            color[i] = 1;
            bool r = dfs(i,m);
            if(r == 0) return false;
        }
    }
    return true;
}
int main(){
    int l(0),r(0);
    int n = read(),m = read();
    rep(i,1,m){
        int u = read(),v = read(),d = read();
        add(u,v,d);
        add(v,u,d);
        r = max(r,d);
    }
    while(l < r){
        int mid = l + r >> 1;
        if(ok(mid,n)) r = mid;
        else l = mid + 1;
    }
    cout << r;
}
Publicado 636 artículos originales · elogiado 38 · 60,000 vistas +

Supongo que te gusta

Origin blog.csdn.net/qq_43408238/article/details/104865736
Recomendado
Clasificación