寒假集训 Day 7 G题 UVA-10054 项链

UVA 10054 项链


题目大意:

给出 n 条端点涂色的边,问是否可以将相同颜色连接起来形成一个环。

解题思路:

  • 首先判断是否具有欧拉回路。
  • 如果不存在欧拉回路,输出““some beads may be lost” ; 如果有欧拉回路,找到一条欧拉回路并输出。
  • 要注意存在重边的情况。
  • 输出的时候要与得到结果的顺序反向输出。

AC代码:

#include<cstdio>
#include<iostream>
#include<vector>
#include<cstring>
#include<cmath>
#include<algorithm>
#include<limits.h>
#define rep(i,l,p) for(int i=l; i<=p; i++)
#define drep(i,p,l) for(int i=p; i>=l; i--)
using namespace std;
const int maxC = 55;
int T,n;
int G[maxC][maxC],deg[maxC];
struct edge{
    int from,to;
    edge(int from, int to):from(from),to(to){}
};
vector<edge> ans;
void dfs(int u){
    rep(v,1,maxC-2){
        if ( G[u][v] >0 ){
            G[u][v]--;
            G[v][u]--;
            dfs(v);
            ans.push_back(edge(u,v));
        }
    }
}

int main(){
    //freopen("in.txt","r",stdin);
    //freopen("out.txt","w",stdout);
    scanf("%d",&T);
    rep(z,1,T){
        scanf("%d",&n);
        memset(G,0,sizeof(G));
        memset(deg,0,sizeof(deg));
        int u,v;
        rep(i,1,n){
            scanf("%d%d",&u,&v);//bug 可能有重边 
            G[u][v]++;
            G[v][u]++;
            deg[u]++;
            deg[v]++;

        }
        bool flag = true;
        rep(i,1,maxC-2){  //bug maxC没减,越界了 
            if ( deg[i] % 2 != 0 ){
                flag = false;
                break;
            }
        }
        if ( flag ){
            ans.clear();
            dfs(u);
            if ( ans.size() != n || ans[0].to != ans[ans.size()-1].from ){
                flag = false;
            }
        }
        printf("Case #%d\n", z);
        if ( !flag ){
            printf("some beads may be lost\n");
        }else{
            drep(i,ans.size()-1,0){//反向输出 
                printf("%d %d\n",ans[i].from,ans[i].to);
            }
        }

        if ( z< T) cout << endl;
    }
    return 0;
}
1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 、4下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合;、下载 4使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合;、 4下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值