当前位置:   article > 正文

Codeforces 1481D AB Graph 三元环结论,构造_完全图中三元环

完全图中三元环

文章目录

题意

一张完全图的每一条有向边上写着 a a a或者 b b b,问能否构造一条边数为 m m m的不间断路线使该路线为回文串.

推论

随便找两个点,我们发现边数为奇数的回文串是必定能够构造出来的.
随便找一个三元环,假设三个点为 x , y , z x,y,z x,y,z.我们发现其中必定有一个点 y y y满足 x − > y x->y x>y y − > z y->z y>z是同一个字母,如果不是 y y y就调整为 x x x或者 z z z,肯定有.枚举所有情况可证.
那么对于边数为偶数的回文串,必有 z , x , z , x , y , z , x , z , x ( 前 面 和 后 面 一 起 加 ) z,x,z,x,y,z,x,z,x(前面和后面一起加) z,x,z,x,y,z,x,z,x()这条路线可以构造出任意长度边数为偶数的回文串.
唯一一种不存在答案的情况就是边数为偶数,点数为 2 2 2的情况.
所以代码如下.

const int aoi=2038;
char c[aoi][aoi];
vector<int> zw;
 
int main() {
  for (int t=read();t--;) {
    int n,m,i,j;
    read(n),read(m);
    for (i=1;i<=n;++i) scanf("%s",c[i]+1);
    if (m&1) {
      puts("YES");
      for (i=0;i<=m;++i) printf("%d ",i%2+1);pl;
    } else {
      if (n==2) {
        puts(c[1][2]==c[2][1]?"YES":"NO");
        if (c[1][2]==c[2][1]) {
          for (i=0;i<=m;++i) printf("%d ",i%2+1);pl;
        }
      } else {
        puts("YES");
        int f=c[1][2]==c[2][3]?2:c[2][3]==c[3][1]?3:1;
        for (i=0;i<=m;++i) printf("%d ",(f+i+m-1)%3+1);pl;
      }
    }
  }  
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/AllinToyou/article/detail/64624
推荐阅读
相关标签
  

闽ICP备14008679号