zoukankan      html  css  js  c++  java
  • [Jsoi2015] 种花

    题面:

    刚看到这题以为是个4分图染色,求染色数,想着是个神奇的什么鬼算法???

    觉得应该是个数论

    然后转眼看了看这及其之水的数据。。。。

    DFS我来了qwq

    思路很简单,枚举每个点的每种颜色,若四种颜色还有没染的就染上,

    染完回溯,ans++,然后枚举下一种情况,

    然后这题就结束了。

     1 #include<iostream>
     2 #include<cstdio>
     3 #include<cmath>
     4 #include<list>
     5 #include<map>
     6 #include<queue>
     7 #include<set>
     8 #include<stack>
     9 #include<cstring>
    10 #include<vector>
    11 
    12 using namespace std;
    13 
    14 inline int read()
    15 {
    16     int x=0,f=1;
    17     char ch=getchar();
    18     while(ch<'0'||ch>'9')
    19     {
    20         if(ch=='-')
    21             f=-1;
    22         ch=getchar();
    23     }
    24     while(ch>='0'&&ch<='9')
    25     {
    26         x=(x<<1)+(x<<3)+(ch^48);//x=x*10+ch-'0';
    27         ch=getchar();
    28     }
    29     return x*f;
    30 }
    31 
    32 inline void print(int x)
    33 {
    34     if(x<0) 
    35     x=-x,putchar('-');
    36     if(x>9) 
    37     print(x/10);
    38     putchar(x%10+'0');
    39 }
    40 
    41 bool adj[11][11];
    42 int n,m,ans,col[11];
    43 
    44 bool can_color(int x,int color)
    45 {
    46     for(int i=1;i<=n;i++)
    47     {
    48         if(i==x)
    49         continue;
    50         if(!adj[i][x])
    51         continue;
    52         if(col[i]==color)
    53         return false;
    54     }
    55     return true;
    56 }
    57 
    58 void dfs(int x)
    59 {
    60     if(x>n)
    61     {
    62         ans++;
    63         return;
    64     }
    65     for(int i=1;i<=4;i++)
    66     {
    67         if(can_color(x,i))
    68         {
    69             col[x]=i;
    70             dfs(x+1);
    71             col[x]=0;
    72         }
    73     }
    74 }
    75 
    76 int main()
    77 {
    78     //freopen("colour.in","r",stdin);
    79     //freopen("colour.out","w",stdout);
    80 
    81     n=read();
    82     m=read();
    83     for(int i=1;i<=m;i++)
    84     {
    85         int x=read(),y=read();
    86         adj[x][y]=adj[y][x]=1;
    87     }
    88     dfs(1);
    89     print(ans);
    90     
    91     //fclose(stdin);
    92     //fclose(stdout);
    93     return 0;
    94 }
    by YLCH
    对不起啊,因为我是一个活在二次元的人,生为野犬,喻世,勿争了吧。
  • 相关阅读:
    洛谷 P1650 田忌赛马(dp)
    卡常技巧(持续更新)
    CF106C Buns(多重背包 单调队列优化)
    洛谷 P1385 密令(dp,离线)
    CF245H Queries for Number of Palindromes(dp,二维前缀和)
    CF1061C Multiplicity(dp)
    对拍技巧
    牛客练习赛89 解题报告(ABCDF)
    洛谷 P1018 [NOIP2000 提高组] 乘积最大(dp,高精度)
    洛谷 P5629 【AFOI-19】区间与除法(ST表)
  • 原文地址:https://www.cnblogs.com/YLCHANGE/p/11846550.html
Copyright © 2011-2022 走看看