1 条题解

  • 0
    @ 2025-9-10 9:05:47

    C++ :

    #include<cstdio>
    #include<map>
    #include<algorithm>
    using namespace std;
    #define mp make_pair
    map<pair<int,int>,int> m;
    int fir[200010],ne[400010],to[400010],
    n,num,ans,p;
    void add(int u,int v)
    {
        num++;
        ne[num*2]=fir[u];
        fir[u]=num*2;
        to[num*2]=v;
        ne[num*2+1]=fir[v];
        fir[v]=num*2+1;
        to[num*2+1]=u;
    }
    void dfs(int u,int fa,int dis)
    {
        int v;
        if (dis>ans)
        {
            ans=dis;
            p=u;
        }
        for (int i=fir[u];i;i=ne[i])
            if ((v=to[i])!=fa)
                dfs(v,u,dis+1);
    }
    int main()
    {
        int x,y,z;
        scanf("%d",&n);
        for (int i=1;i<=n-2;i++)
        {
            scanf("%d%d%d",&x,&y,&z);
            if (x>y) swap(x,y);
            if (x>z) swap(x,z);
            if (y>z) swap(y,z);
            if (x+1!=y)
            {
                if (m.count(mp(x,y))) add(i,m[mp(x,y)]);
                else m[mp(x,y)]=i;
            }
            if (y+1!=z)
            {
                if (m.count(mp(y,z))) add(i,m[mp(y,z)]);
                else m[mp(y,z)]=i;
            }
            if (x!=1||z!=n)
            {
                if (m.count(mp(x,z))) add(i,m[mp(x,z)]);
                else m[mp(x,z)]=i;
            }
        }
        ans=-1;
        dfs(1,-1,0);
        ans=-1;
        dfs(p,-1,0);
        printf("%d\n",ans+1);
    }
    
    • 1

    信息

    ID
    3731
    时间
    1000ms
    内存
    128MiB
    难度
    (无)
    标签
    递交数
    0
    已通过
    0
    上传者