zoukankan      html  css  js  c++  java
  • CF1255C League of Leesins(图论)

    题意:

    给出N-2个三元组,这些三元组内部顺序都被打乱,同时不同三元组之间的先后顺序也被打乱,请你还原这个序列!

    题解:

    建图,每个三元组内部两两建边,然后统计每个元素在所有组中的出现次数。

    不难发现,只出现过一次的一定是起点或终点。

    确定起点之后,遍历起点所连的点,出现两次的是第二个点。

    确定前两个点之后每次从第一个点所连的点里找出未访问的节点,确定为第三个节点,再把前两个点往后推,循环处理。

    思维+图论,又没处理好...

    #include<bits/stdc++.h>
    using namespace std;
    const int maxn=1e5+100;
    vector<int> g[maxn];
    map<int,int> pos;
    int visit[maxn];
    int main () {
        int N;
        scanf("%d",&N);
        for (int i=1;i<=N-2;i++) {
            int x,y,z;
            scanf("%d%d%d",&x,&y,&z);
            g[x].push_back(y),g[x].push_back(z);
            g[y].push_back(x),g[y].push_back(z);
            g[z].push_back(y),g[z].push_back(x);
            pos[x]++,pos[y]++,pos[z]++;
        }
        int f1;
        for (f1=1;f1<=N;f1++) 
            if (pos[f1]==1) break;
        int f2;
        if (pos[g[f1][0]]==2) 
            f2=g[f1][0];
        else 
            f2=g[f1][1];
        visit[f1]=1;
        visit[f2]=1;
        printf("%d %d",f1,f2);
        for (int i=1;i<=N-2;i++) {
            int f3;
            for (int j=0;j<g[f1].size();j++) 
                if (!visit[g[f1][j]]) {
                    f3=g[f1][j];
                    break;
                }
            visit[f3]=1;
            printf(" %d",f3);
            f1=f2,f2=f3;
        }
    }
  • 相关阅读:
    【Quartz】工作原理
    【Quartz】基本原理
    【Quartz】一个小Demo
    【转载】基于Redis实现分布式锁
    【转载】Java 9 新特性——模块化
    【转载】一致性哈希
    大型网站架构演进
    分布式系统概述
    加入tkmybatis,进行批量插入
    mysql,SqlServer批量插入
  • 原文地址:https://www.cnblogs.com/zhanglichen/p/12636470.html
Copyright © 2011-2022 走看看