• Codeforces 325E


    Codeforces 325E

    原题
    题目描述:给出(n)个点, 编号为(0 ext ~ n-1),每个点连出两条边分别为(2i)(2i+1)((mod n)),现从(0)出发,最后回到(0),且每个点必须且只到达一次((0)为两次),输出一条可行路径。

    solution
    能发现(2i=2(i+n/2)(mod n), 2i+1=2(i+n/2)+1(mod n)),那就可以把(i)((i+n/2))看做一个点,原图变成一个(n/2)(n)边图,每条边都要经过一次,也就是欧拉回路,然后搜索求解就好了。

    code

    #include <cstdio>
    #include <algorithm>
    #include <cstring>
    #include <cstdlib>
    #include <ctime>
    #include <cmath>
    #include <map>
    #include <set>
    using namespace std;
    
    const int maxn=int(1e5)+100;
    
    int n, sum;
    int route[maxn];
    bool vis[maxn];
    
    void dfs(int cur)
    {
    	if (vis[cur]) return;
    	vis[cur]=true;
    	dfs((cur*2)%n);
    	dfs((cur*2+1)%n);
    	route[++sum]=cur;
    }
    void solve()
    {
    	dfs(0);
    	for (int i=sum; i>0; --i) printf("%d ", route[i]);
    	printf("0
    ");
    }
    int main()
    {
    	freopen("input.txt", "r", stdin);
    	freopen("output.txt", "w", stdout);
    	scanf("%d", &n);
    	if (n & 1) printf("-1
    ");
    	else solve();
    	return 0;
    }
    
    
  • 相关阅读:
    软件工程第二次作业
    软件工程第一次作业
    5T-时延小结
    4T--5G网络时延
    2T--网络切片
    1T--5G 三大应用场景
    2020软件工程第一次作业
    软件工程最后一次作业
    软件工程第四次作业
    软件工程第三次作业
  • 原文地址:https://www.cnblogs.com/GerynOhenz/p/4972672.html
Copyright © 2020-2023  润新知