URAL 1040. Airline company

URAL 1040. Airline company
题目要求与每个顶点相连的所有边编号最大公约数为1,其实只要其中的两条边编号互质,所有边编号的最大公约数一定为1。我们知道相邻的数字一定互质,那么 只要与一个顶点相连的所有边中有两条编号相邻,这个顶点就可以符合条件。DFS序列,对边进行编号刚好可以构造出满足要求的解,并且无解的情况是不存在的。
 1  #include  < iostream >
 2  using   namespace  std;
 3  int  n,m;
 4  int  con[ 60 ][ 60 ];
 5  int  link[ 60 ][ 60 ];
 6  int  num[ 5000 ];
 7  int  now;
 8  bool  v[ 60 ];
 9  bool  p[ 5000 ];
10 
11  void  dfs( int  x){
12       for  ( int  i = 1 ;i <= con[x][ 0 ]; ++ i)  if  ( ! p[link[x][i]]){
13          p[link[x][i]] = true ;
14          num[link[x][i]] =++ now;
15           if  ( ! v[con[x][i]]){
16              v[con[x][i]] = true ;
17              dfs(con[x][i]);
18              }
19          }
20      }
21 
22  int  main(){
23      scanf( " %d %d " , & n, & m);
24       for  ( int  i = 1 ;i <= m; ++ i){
25           int  a,b;
26          scanf( " %d %d " , & a, & b);
27          con[a][ ++ con[a][ 0 ]] = b;
28          con[b][ ++ con[b][ 0 ]] = a;
29          link[a][ ++ link[a][ 0 ]] = i;
30          link[b][ ++ link[b][ 0 ]] = i;
31          }
32      v[ 1 ] = true ;
33      dfs( 1 );
34      printf( " YES\n " );
35       for  ( int  i = 1 ;i <= m; ++ i) printf( " %d  " ,num[i]);
36      }
37 
 

你可能感兴趣的:(URAL 1040. Airline company)