社区讨论

老师给的p1090的代码错了(超时),求助~~~

学术版参与者 7已保存回复 11

讨论操作

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

当前回复
11 条
当前快照
1 份
快照标识符
@mi7uqszb
此快照首次捕获于
2025/11/21 03:56
4 个月前
此快照最后确认于
2025/11/21 04:04
4 个月前
查看原帖
 
------------
这次我被我春令营的直播老师坑的生无可恋~~~是真心觉得在小伙伴中才有爱……
附上代码:
```
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cctype>
#include<queue>
#define ll long long
#define INF 0x3fffff
#define clr(x) memset(x,0,sizeof(x))

using namespace std;

inline int read()
{
  register int ret=0,c=getchar(),b=1;
  while(!isdigit(c))b=c=='-'?-1:1,c=getchar();
  while(isdigit(c))ret=ret*10+c-'0',c=getchar();
  return ret*b;
}

#define M 100005
#define P 1000000007
//(x+y)%P  
inline int moc(int x)
{
  return x>=P?x-P:x;
}

int first[M],next[M<<1],to[M<<1],t;
int n;

void addedge(int s,int u)
{
  next[++t]=first[s];
  first[s]=t;
  to[t]=u;
}

int d[M],fa[M],mx,p;

void dfs(int x)
{
  for(int i=first[x];i;i=next[i])
  {
    int v=to[i];
    if(v==fa[x])continue;
    d[v]=d[x]+1;
    fa[v]=x;
    dfs(v);
  }
}

int main()
{
  n=read();
  for(int i=1;i<n;i++)
  {
    int a=read(),b=read();
    addedge(a,b);
    addedge(b,a);
  }
  dfs(1);
  for(int i=1;i<=n;i++)
    if(d[i]>mx)
      mx=d[i],p=i;
  clr(fa);clr(d);
  dfs(p);
  mx=0;
  for(int i=1;i<=n;i++)
    mx=max(d[i],mx);
  printf("%d\n",mx+1);
  return 0;
}

```

回复

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

正在加载回复...