社区讨论

全TLE 求调

P2610[ZJOI2012] 旅游参与者 3已保存回复 6

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
6 条
当前快照
1 份
快照标识符
@mjy0lso7
此快照首次捕获于
2026/01/03 16:02
2 个月前
此快照最后确认于
2026/01/06 22:15
上个月
查看原帖
CPP
#include<bits/stdc++.h>
using namespace std;
const int QWQ = 5e5 + 5;
map<pair<int, int>, vector<int> > ma;
int n, head[QWQ], ecnt, dp[QWQ], f[QWQ], maxx, se;
struct edge
{
    int to, nxt;
}e[QWQ];
void addedge(int u, int v)
{
    ecnt ++;
    e[ecnt].to = v;
    e[ecnt].nxt = head[u];
    head[u] = ecnt;
    // cout << u << " " << v << endl;
}
void makenode(int x, int y, int u)
{
    pair<int, int> p = make_pair(x, y);
    if(ma[p].size() != 0)
    {
        int v = ma[p][0];
        addedge(u, v);
        addedge(v, u);
    }
    else
    {
        ma[p].push_back(u);
    }
}
void dfs(int u, int fa)
{
    dp[u] = 1;
    for(int i = head[u]; i != 0; i = e[i].nxt)
    {
        int v = e[i].to;
        if(v != fa)
        {
            dfs(v, u);
            dp[u] = max(dp[u], dp[v] + 1);
        }
    }
}
signed main()
{
    cin >> n;
    for(int i = 1; i < n - 1; i ++)
    {
        int p, q, r;
        cin >> p >> q >> r;
        makenode(p, q, i);
        makenode(p, r, i);
        makenode(r, q, i);

        makenode(q, p, i);
        makenode(r, p, i);
        makenode(q, r, i);
    }
    dfs(1, 0);
    for(int i = head[1]; i != 0; i = e[i].nxt)
    {
        int now = dp[e[i].to];
        if(now >= maxx)
        {
            se = maxx;
            maxx = now;
        }
        else if(now > se) se = now;
    }
    cout << maxx + se;
}

回复

6 条回复,欢迎继续交流。

正在加载回复...