hiho一下 第五十周(欧拉路径)50



///////////////////////////////////////////////////////////////////////////////////////////////////////

作者:tt267

声明:本文遵循以下协议自由转载-非商用-非衍生-保持署名|Creative Commons BY-NC-ND 3.0

查看本文更新与讨论请点击:http://blog.csdn.net/tt2767/article/details/46493073

///////////////////////////////////////////////////////////////////////////////////////////////////////



比赛链接:http://hihocoder.com/contest/hiho50

题目链接:http://hihocoder.com/problemset/problem/1177

(比赛过期后可用)

题目里的提示解释的很清楚了,就是伪代码略坑。。

注意重边的问题,WA了我好几次

#include<iostream>
#include<algorithm>
#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<cmath>
#include<sstream>
#include<string>
#include <iterator>
#include<vector>
#include<map>
#include <stack>
#include<queue>
#include<set>
#include <list>
#include<functional>
#include<numeric>
using namespace std;
typedef  long long int LL;
const int INF = 99999999;
const long double PI = acos(0.0) * 2.0;

const int N = 1009;//不要太大,内存可能超限
stack<int>S;
int edge[N][N];
int n,m;
bool flag = true;

void Fleury(int start);
void dfs(int x);

int main()
{
    int u,v;
    memset(edge,0,sizeof(edge));
    scanf("%d%d",&n,&m);
    for(int i=0; i<m; i++)
    {
        scanf("%d%d",&u,&v);
        edge[u][v]++;
        edge[v][u]++;   //记录边的个数,可能有重边
    }
    int start=1;
    for(int i=1; i<=n; i++)//判断欧拉回路的起点
    {
        int degree=0;
        for(int j=1; j<=n; j++)
        degree+=edge[i][j];
     if(degree&1)
        {
            start=i;
            break;  //取第一个就可以了
        }
    }
    Fleury(start);
    return 0;
}
void Fleury(int u)
{
    S.push(u);
    while(!S.empty())
    {
        bool bridge = false;
        for(int i=1; i<=n; i++)//判断一下是否有支路,就是判断下有木有桥
        {
            if(edge[S.top()][i]>0)
            {
                bridge=true;
                break;
            }
        }
        if(bridge)
        {
            int v=S.top();S.pop();
            dfs(v); //如果有,就dfs
        }
        else
        {
            if(flag)//使输出尾部没有空格
            {
                printf("%d",S.top());
                flag = false;
            }
            else
                printf(" %d",S.top());

            S.pop();
        }
    }
    puts("");
}

void dfs(int u)
{
    S.push(u);
    for(int v=1; v<=n; v++)
    {
        if(edge[u][v]>0)
        {
            edge[u][v]--;//删除此边
            edge[v][u]--;
            dfs(v);
            break;
        }
    }
}
时间: 2024-08-25 18:44:52

hiho一下 第五十周(欧拉路径)50的相关文章

hiho一下 第五十周 题目1 : 欧拉路&#183;二

时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 在上一回中小Hi和小Ho控制着主角收集了分散在各个木桥上的道具,这些道具其实是一块一块骨牌. 主角继续往前走,面前出现了一座石桥,石桥的尽头有一道火焰墙,似乎无法通过. 小Hi注意到在桥头有一张小纸片,于是控制主角捡起了这张纸片,只见上面写着: 将M块骨牌首尾相连放置于石桥的凹糟中,即可关闭火焰墙.切记骨牌需要数字相同才能连接. ——By 无名的冒险者 小Hi和小Ho打开了主角的道具栏,发现主角恰好拥有M快骨牌. 小H

hiho一下 第五十周 欧拉路&#183;二

题目链接:click here~~ [题目大意] 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 在上一回中小Hi和小Ho控制着主角收集了分散在各个木桥上的道具,这些道具其实是一块一块骨牌. 主角继续往前走,面前出现了一座石桥,石桥的尽头有一道火焰墙,似乎无法通过. 小Hi注意到在桥头有一张小纸片,于是控制主角捡起了这张纸片,只见上面写着: 将M块骨牌首尾相连放置于石桥的凹糟中,即可关闭火焰墙.切记骨牌需要数字相同才能连接. --By 无名的冒险者 小Hi和小Ho打

hiho一下 第五十九周 题目1 : Performance Log

题目1 : Performance Log 时间限制:8000ms 单点时限:1000ms 内存限制:256MB 描述 You are given a txt file, which is performance logs of a single-threaded program. Each line has three columns as follow: [Function Name] [TimeStamp] [Action] [FunctionName] is a string of le

hiho一下 第五十一周(有向图欧拉路径)51

/////////////////////////////////////////////////////////////////////////////////////////////////////// 作者:tt267 声明:本文遵循下面协议自由转载-非商用-非衍生-保持署名|Creative Commons BY-NC-ND 3.0 查看本文更新与讨论请点击:http://blog.csdn.net/tt2767 链接被删请百度: CSDN tt2767 ////////////////

hiho一下 第五十八周 Beautiful String dp

题目1 : Beautiful String 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 We say a string is beautiful if it has the equal amount of 3 or more continuous letters (in increasing order.) Here are some example of valid beautiful strings: "abc", "cde"

[hihoCoder] 第五十周: 欧拉路&#183;二

题目1 : 欧拉路·二 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 在上一回中小Hi和小Ho控制着主角收集了分散在各个木桥上的道具,这些道具其实是一块一块骨牌. 主角继续往前走,面前出现了一座石桥,石桥的尽头有一道火焰墙,似乎无法通过. 小Hi注意到在桥头有一张小纸片,于是控制主角捡起了这张纸片,只见上面写着: 将M块骨牌首尾相连放置于石桥的凹糟中,即可关闭火焰墙.切记骨牌需要数字相同才能连接. ——By 无名的冒险者 小Hi和小Ho打开了主角的道具栏,发现主角

hiho一下 第四十周 题目1 : 三分&#183;三分求极值

时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 这一次我们就简单一点了,题目在此: 在直角坐标系中有一条抛物线y=ax^2+bx+c和一个点P(x,y),求点P到抛物线的最短距离d. 提示:三分法 × 提示:三分法 在之前的几周中我们了解到二分法作为分治中最常见的方法,适用于单调函数,逼近求解某点的值. 但当函数是凸形函数时,二分法就无法适用,这时就需要用到三分法. 从三分法的名字中我们可以猜到,三分法是对于需要逼近的区间做三等分: 我们发现lm这个点比rm要低,那

hiho一下 第三十周 小Hi小Ho的惊天大作战:扫雷&#183;一

时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 故事背景:密室.监视器与充满危机的广场 "我们还是循序渐进,先来考虑这样一个简单化问题:"小Hi思索片刻,道:"在一个大小为2*N的广场,其中第一行里的某一些格子里可能会有至多一个地雷,而第二行的格子里全都为数字,表示第一行中距离与这个格子不超过2的格子里总共有多少个地雷,即第二行的第i个格子里的数字表示第一行的第i-1个, 第i个, 第i+1个,三个格子(如果i=1或者N则不一定有三个)里的地雷的

[HiHoCoder]三分&#183;三分求极值[hiho一下 第四十周]

时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 在直角坐标系中有一条抛物线y=ax^2+bx+c和一个点P(x,y),求点P到抛物线的最短距离d. 提示:三分法 输入 第1行:5个整数a,b,c,x,y.前三个数构成抛物线的参数,后两个数x,y表示P点坐标.-200≤a,b,c,x,y≤200 输出 第1行:1个实数d,保留3位小数(四舍五入) 样例输入 2 8 2 -2 6 样例输出 2.437 import java.math.BigDecimal; impor