社区讨论
全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 条回复,欢迎继续交流。
正在加载回复...