zoukankan      html  css  js  c++  java
  • 洛谷p1330,封锁阳光大学

    #include<stdio.h>
    #include<iostream>
    using namespace std;
    int num_edge=0,head[10001],sum,n,m,u,v,d,mark[10001],sum1=1,sum2=0;
    bool markt=0;
    struct Edge
    {
     int next,to,dis;
    }edge[200001];
    void add_edge(int from,int to)
    {
     edge[++num_edge].next=head[from];
     edge[num_edge].to=to;
     head[from]=num_edge;
    }
    void dfs(int tt,int mi)

     for(int i=head[tt];i!=0;i=edge[i].next)
      { if(markt==1) return;
       if(mark[edge[i].to]==0)
       {
        mark[edge[i].to]=mi;
        if(mi==1) {//printf("%d  %d>> ",mark[edge[i].to],edge[i].to);
        sum1++;
        }
        else
        {//printf("%d  %d<< ",mark[edge[i].to],edge[i].to);
        sum2++;
        }
        dfs(edge[i].to,-mark[edge[i].to]);
       }
       else if(mark[edge[i].to]!=mi)
       {
        printf("Impossible");markt=1;return;
       }
      }
    }
    int min(int a,int b)

     return a>b?b:a;
    }
    int  main()
    { cin>>n>>m;
     for(int i=1;i<=m;i++)
      {
       cin>>u>>v;
       add_edge(u,v);
       add_edge(v,u);
      }
     for(int i=1;i<=n;i++)
     { if(mark[i]==0)
      {mark[i]=1;
      dfs(i,-mark[i]);
      }
      sum+=min(sum1,sum2);
      sum1=1;sum2=0;
      if(markt==1) return 0;
     }
     //for(int i=1;i<=n;i++)
     // printf("%d>>%d  ",i,mark[i]);
     if(markt==0) printf("%d",sum);
     return 0;
     }

    一个比较基础的图的遍历的模板题,深度优先搜索遍历。

    黑白染色法,解决相邻点不同。

    ***注意:无向图储存边的条数是题目要求的两倍。。

  • 相关阅读:
    FZU Problem 2150 Fire Game
    HTTP协议认识
    GitHub
    设计模式学习笔记(一)——面向对象设计模式与原则
    信息安全系统设计基础第九周学习总结
    信息安全系统设计基础第八周期中总结
    家庭作业二
    信息安全系统设计基础第七周学习总结
    家庭作业
    信息安全系统设计基础第六周学习总结
  • 原文地址:https://www.cnblogs.com/xcsj/p/11937814.html
Copyright © 2011-2022 走看看