上海交大-“Code人心弦”9月网络赛-OddGraph

简介: 给你一个无向图,如果所有顶点的度都为奇数,则输出ODD GRAPH,否则找该图的子图是否存在满足条件的,存在则输出最少顶点数和对应顶点的序号,否则输出NO ODD SUBGRAPH。

1098. OddGraph

Description


Pangzi looks somehow odd recently. He started to love odd things, like odd numbers and odd graphs. He says, an odd graph is a non-empty graph (that is the set of vertices is non-empty) that every vertex has an odd degree (that is, connected to an odd number of edges). If a graph is not odd, he will try to find a subgraph that is odd. In Pangzi's mind, a subgraph of a graph G=(V, E) is composed by some vertices in G and all edges between these vertices from G. Mathematically, G'=(V', E') where V' is a subset of V and E'={(u, v): u, v in V' and (u, v) in E}.


Now Pangzi will give you a graph, please tell him if this graph is odd. If it is not odd, try to find an odd subgraph.


Pay attention. As Pangzi is odd now, when he talks about graphs, he is actually talking about undirected graphs.


Input Format


The first line of the input is an integer T (T <= 100), indicating the number of test cases.


Then, T test cases follow. For every test case, the first line is 2 integers n, m (1 <= n <= 100, 0 <= m <= 1000). Then m lines follow, every line contains 2 integers u, v (1<=u, v<=n) indicating an edge in G.


There is no self-loop or parallel edge.


Output Format


Output the answer for each test case.


  • If the graph is an odd graph, output "ODD GRAPH".
  • If the graph is not odd and contains an odd subgraph, output the subgraph in the following format. First output a number K, the vertices in this subgraph, and then output K integers in increasing order representing the vertices. These numbers should be printed in one line and separated by one space. No extra spaces. If there are multiple solutions, first minimize K, and if there are still multiple solutions, output the lexicographically smallest sequence of vertices.
  • If the graph is not odd and contains no odd subgraph, output "NO ODD SUBGRAPH"


For two sequences a[1], a[2], ..., a[K] and b[1], b[2], ..., b[k], a is lexicographically smaller than b if and only if for the smallest i such that a[i] != b[i], a[i] < b[i].


See the sample output for clarifications.


Sample Input


3
1 0
4 4
1 2
2 3
3 4
4 1
2 1
1 2

Sample Output



NO ODD SUBGRAPH
2 1 2
ODD GRAPH


Case Limits


Time limit: 500 msec


Memory limit: 64 MB


题意:给你一个无向图,如果所有顶点的度都为奇数,则输出ODD GRAPH,否则找该图的子图是否存在满足条件的,存在则输出最少顶点数和对应顶点的序号,否则输出NO ODD SUBGRAPH。


思路:用x[i]记录i顶点的度,map[i][j]记录顶点i和j之间有几条边,遍历x数组判断是否为ODD GRAPH,是则输出,否则继续判断子图,若存在,最小子图的顶点数必然为2,因此从顶点1往下找即可。


#include<stdio.h>
#include<string.h>
int map[122][122];
int x[122];
int main()
{ 
  int n,m,t,i,j,a,b;  
  while(scanf("%d",&t)!=EOF)  
  {   
    while(t--)    
    {     
      scanf("%d%d",&n,&m);      
      if(m==0)      
      {       
        printf("NO ODD SUBGRAPH\n");        
        continue;   
      }
      memset(x,0,sizeof(x));    
      memset(map,0,sizeof(map));      
      for(i=0;i<m;i++)      
      {       
        scanf("%d%d",&a,&b);        
        x[a]++;       
        x[b]++;       
        map[a][b]++;        
        map[b][a]++;      
      }   
      int flag=0;     
      for(i=1;i<=n;i++) 
      {     
        if(x[i]%2==0)   
        {     
          flag=1;   
          break;    
        }   
      }   
      int flag1,xx,yy;    
      if(flag==1) 
      {     
        flag1=0;  
        for(i=1;i<=n;i++) 
        {         
          for(j=i+1;j<=n;j++)   
          {         
            if(map[i][j]%2==1)  
            {         
              flag1=1;    
              xx=i;     
              yy=j; 
              break;    
            }       
          }       
          if(flag1==1)      
            break;      
        }   
      }   
      else    
        printf("ODD GRAPH\n");    
      if(flag1==1)    
      {     
        printf("2 %d %d\n",xx,yy);    
        flag1=2;      
      }     
      if(flag==0&&flag1==0)       
        printf("NO ODD SUBGRAPH\n");  
    }
  }
  return 0;
}
相关文章
|
网络协议 网络安全
【Sword系列】第七届全国残疾人职业技能大赛样题-网络安全-flag not found
pcapng文件是Packet Capture Next Generation的缩写,是一种新型的网络数据包捕获文件格式。
97 0
 【Sword系列】第七届全国残疾人职业技能大赛样题-网络安全-flag not found
|
编解码 安全 量子技术
4600公里!中科大潘建伟团队构建全球首个星地量子通信网,成果再登《Nature》
【新智元导读】中科大今日凌晨宣布,中国科研团队实现了跨越4600公里的星地量子密钥分发,成功构建全球首个天地一体化量子通信网络!该成果由中科大潘建伟团队在《Nature》杂志上发表。
186 0
4600公里!中科大潘建伟团队构建全球首个星地量子通信网,成果再登《Nature》
|
机器人
CMU大学生真的强上天了:设计登月车,2021年代表美国登月
人家卡耐基·梅隆的本科生,搞的这个东西真的exciting:他们做一个项目设计出来的漫游车,即将在2021年被NASA发射上月球,成为美国第一个探索月面的登月车。
247 0
CMU大学生真的强上天了:设计登月车,2021年代表美国登月
|
开发者
繁星计划之阿里小程序征文活动-「Code Lab科技创新营」北京大学
“繁星计划阿里小程序征文活动”已经开始啦!本次活动参赛形式多样、奖品福利多多,请大家踊跃参与。
1074 12
繁星计划之阿里小程序征文活动-「Code Lab科技创新营」北京大学
「Code Lab科技创新营」浙江大学宁波理工学院
蚂蚁金服金融科技携手浙江省内优秀高校与合作伙伴,建立长期的科技育人计划并推出「Code Lab科技创新营」 「Code Lab科技创新营」项目主要开放给具备一定信息技术基础的本科院校三、四年级或在校研究生同学, 邀请到数位蚂蚁金服高级技术工程师及高校博士导师以3天集中课程的形式向学生输出蚂蚁技术与能力,与同学们面对面深入探讨,共同实践。 本次活动以”SOFABoot微服务框架项目开发“为课程主题,由专业老师辅导,学生上手实操开发。真正做到技术不再是理论,上手不再是梦想。
「Code Lab科技创新营」浙江大学宁波理工学院
「Code Lab科技创新营」夏令营
蚂蚁金服金融科技携手浙江省内优秀高校与合作伙伴,建立长期的科技育人计划并推出「Code Lab科技创新营」 「Code Lab科技创新营」项目主要开放给具备一定信息技术基础的本科院校三、四年级或在校研究生同学, 邀请到数位蚂蚁金服高级技术工程师及高校博士导师以2天集中课程的形式向学生输出蚂蚁技术与能力,与同学们面对面深入探讨,共同实践。 本次活动以”如何创造出支付宝移动APP“为课程主题,由专业老师辅导,学生上手实操开发。真正做到技术不再是理论,上手不再是梦想。
「Code Lab科技创新营」夏令营
「Code Lab科技创新营」 长春职业技术学院
蚂蚁金服金融科技携手国内优秀高校与合作伙伴,建立长期的科技育人计划并推出「Code Lab科技创新营」 「Code Lab科技创新营」项目主要开放给具备一定信息技术基础的本科院校三、四年级或在校研究生同学, 邀请到数位蚂蚁金服高级技术工程师及高校博士导师以3天集中课程的形式向学生输出蚂蚁技术与能力,与同学们面对面深入探讨,共同实践。 本次活动以”SOFABoot微服务框架项目开发“为课程主题,由专业老师辅导,学生上手实操开发。真正做到技术不再是理论,上手不再是梦想。 议程
「Code Lab科技创新营」 长春职业技术学院
「Code Lab科技创新营」浙江大学
蚂蚁金服金融科技携手浙江省内优秀高校与合作伙伴,建立长期的科技育人计划并推出「Code Lab科技创新营」 「Code Lab科技创新营」项目主要开放给具备一定信息技术基础的本科院校三、四年级或在校研究生同学, 邀请到数位蚂蚁金服高级技术工程师及高校博士导师以3天集中课程的形式向学生输出蚂蚁技术与能力,与同学们面对面深入探讨,共同实践。 本次活动以”如何创造出支付宝移动APP“为课程主题,由专业老师辅导,学生上手实操开发。真正做到技术不再是理论,上手不再是梦想。
「Code Lab科技创新营」浙江大学
「Code Lab科技创新营」浙江大学城市学院
蚂蚁金服金融科技携手浙江省内优秀高校与合作伙伴,建立长期的科技育人计划并推出「Code Lab科技创新营」 「Code Lab科技创新营」项目主要开放给具备一定信息技术基础的本科院校三、四年级或在校研究生同学, 邀请到数位蚂蚁金服高级技术工程师及高校博士导师以3天集中课程的形式向学生输出蚂蚁技术与能力,与同学们面对面深入探讨,共同实践。 本次活动以”SOFABoot微服务框架项目开发“为课程主题,由专业老师辅导,学生上手实操开发。真正做到技术不再是理论,上手不再是梦想。
「Code Lab科技创新营」浙江大学城市学院
「Code Lab科技创新营」浙江理工大学
蚂蚁金服金融科技携手浙江省内优秀高校与合作伙伴,建立长期的科技育人计划并推出「Code Lab科技创新营」 「Code Lab科技创新营」项目主要开放给具备一定信息技术基础的本科院校三、四年级或在校研究生同学, 邀请到数位蚂蚁金服高级技术工程师及高校博士导师以3天集中课程的形式向学生输出蚂蚁技术与能力,与同学们面对面深入探讨,共同实践。 本次活动以”SOFABoot微服务框架项目开发“为课程主题,由专业老师辅导,学生上手实操开发。真正做到技术不再是理论,上手不再是梦想。
「Code Lab科技创新营」浙江理工大学