zoukankan      html  css  js  c++  java
  • CF547D Mike and Fish 建图

    题意:

      有点长→CF547DMike and Fish。

    分析:

      其实也没什么好分析的,我这也是看的题解。

      (不过,那篇题解好像文字的代码不太对劲)

      这里直接说做法,正确性自证:

      对输入的,将横、纵坐标相等的点分别两两连边,之后只需要dfs跑一个染色,使得一条边两个端点颜色都不一样即可,这样就可以确定每一个点放红色还是蓝色,输出即可。(至于哪个是红哪个是蓝不重要,有spj)

    代码:

     1 #include<bits/stdc++.h>
     2 using namespace std;
     3 const int N=500005;int n,m;
     4 struct node{int y,nxt;}e[2*N];
     5 int h[N],c=1,vis[N],ans[N][2];
     6 void add(int x,int y){
     7     e[++c]=(node){y,h[x]};h[x]=c;
     8     e[++c]=(node){x,h[y]};h[y]=c;
     9 } void dfs(int x,int y){
    10     if(vis[x]) return ;vis[x]=y;
    11     for(int i=h[x];i;i=e[i].nxt)
    12     dfs(e[i].y,1^y);
    13 } int main(){
    14     scanf("%d",&n);
    15     for(int i=1,x,y;i<=n;i++){
    16         scanf("%d%d",&x,&y);
    17         if(ans[x][0]) 
    18         add(ans[x][0],i),ans[x][0]=0;
    19         else ans[x][0]=i;
    20         if(ans[y][1])
    21         add(ans[y][1],i),ans[y][1]=0;
    22         else ans[y][1]=i;
    23     } for(int i=1;i<=n;i++){
    24         dfs(i,0);
    25         if(vis[i]) putchar('r');
    26         else putchar('b');
    27     } return 0;
    28 }
    染色
  • 相关阅读:
    k8s问题收集
    kubeadm简单安装k8s
    centos7 --kubeadm安装
    K8S各知识点整理
    【转载】dfs序七个经典问题
    ZJOI 2018 一试记
    【模板】高精度
    【科技】扩展欧几里得 + 逆元
    【模板】ISAP最大流
    【模板】最小费用最大流
  • 原文地址:https://www.cnblogs.com/Alan-Luo/p/10432324.html
Copyright © 2011-2022 走看看