当前位置:编程学习 > C/C++ >>

hdu1272-小希的迷宫

小希的迷宫
[cpp] 
// File Name: hdu1272.cpp  
// Author: rudolf  
// Created Time: 2013年04月27日 星期六 13时32分01秒  
 
#include<vector>  
#include<list>  
#include<map>  
#include<set>  
#include<deque>  
#include<stack>  
#include<bitset>  
#include<algorithm>  
#include<functional>  
#include<numeric>  
#include<utility>  
#include<sstream>  
#include<iostream>  
#include<iomanip>  
#include<cstdio>  
#include<cmath>  
#include<cstdlib>  
#include<cstring>  
#include<ctime>  
 
using namespace std; 
const int maxn=100005; 
int fa[maxn],hav[maxn]; 
int flag; 
int find( int x ) 

//  return fa[ x ] = x == fa[ x ] ? x :find( fa[ x ] );  
    while( x != fa[ x ]) 
        x = fa[ x ]; 
    return x; 
 

 
void merge( int x1 ,int x2 ) 

    int x = find( x1 ); 
    int y = find( x2 ); 
    if( x != y ) 
        fa[ x ] = y; 
    else 
        flag = 0;//同父节点,成环  

 
int main() 

    int i,m,n; 
    while(cin>>m>>n) 
    { 
        if( m == -1 && n == -1 ) 
            break; 
        if( m==0 && n==0 ) 
        { 
            cout<<"Yes"<<endl; 
            continue; 
        } 
        for( i = 1; i < maxn; i++ ) 
        { 
            fa[ i ] = i; 
            hav[i]=0; 
        } 
        hav[ m ] = hav[ n ] = 1; 
        flag = 1; 
        merge( m , n ); 
        while( cin >> m >> n ) 
        { 
            if( m == 0 && n == 0) 
                break; 
            merge( m , n ); 
            hav[ m ] = hav[ n ] = 1; 
        } 
        int ans = 0; 
        for( i = 1;i < maxn; i++) 
        { 
            if( hav[ i ] && fa[ i ] == i )//判断根节点k数目  
                ans ++; 
            if( ans > 1 ) 
                flag=0; 
        } 
        if( flag ) 
            cout<<"Yes"<<endl;//这里也坑爹,用PUTS输出和下面一样的错误  
        else 
            cout<<"No"<<endl; 
    } 
return 0; 

// File Name: hdu1272.cpp
// Author: rudolf
// Created Time: 2013年04月27日 星期六 13时32分01秒

#include<vector>
#include<list>
#include<map>
#include<set>
#include<deque>
#include<stack>
#include<bitset>
#include<algorithm>
#include<functional>
#include<numeric>
#include<utility>
#include<sstream>
#include<iostream>
#include<iomanip>
#include<cstdio>
#include<cmath>
#include<cstdlib>
#include<cstring>
#include<ctime>

using namespace std;
const int maxn=100005;
int fa[maxn],hav[maxn];
int flag;
int find( int x )
{
// return fa[ x ] = x == fa[ x ] ? x :find( fa[ x ] );
 while( x != fa[ x ])
  x = fa[ x ];
 return x;

}

void merge( int x1 ,int x2 )
{
 int x = find( x1 );
 int y = find( x2 );
 if( x != y )
  fa[ x ] = y;
 else
  flag = 0;//同父节点,成环
}

int main()
{
 int i,m,n;
 while(cin>>m>>n)
 {
  if( m == -1 && n == -1 )
   break;
  if( m==0 && n==0 )
  {
   cout<<"Yes"<<endl;
   continue;
  }
  for( i = 1; i < maxn; i++ )
  {
   fa[ i ] = i;
   hav[i]=0;
  }
  hav[ m ] = hav[ n ] = 1;
  flag = 1;
  merge( m , n );
  while( cin >> m >> n )
  {
   if( m == 0 && n == 0)
    break;
   merge( m , n );
   hav[ m ] = hav[ n ] = 1;
  }
  int ans = 0;
  for( i = 1;i < maxn; i++)
  {
   if( hav[ i ] && fa[ i ] == i )//判断根节点k数目
    ans ++;
   if( ans > 1 )
    flag=0;
  }
  if( flag )
   cout<<"Yes"<<endl;//这里也坑爹,用PUTS输出和下面一样的错误
  else
   cout<<"No"<<endl;
 }
return 0;
}

 

 


这个是下面的代码提交,深表无语。。。。。。。。。。。。。。。。。。。。。。。。。

 

[cpp] 
// File Name: hdu1272.cpp  
// Author: rudolf  
// Created Time: 2013年04月27日 星

补充:软件开发 , C++ ,
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,