社区讨论

怎么报零了?求大佬指点

P3884[JLOI2009] 二叉树问题参与者 1已保存回复 0

讨论操作

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

当前回复
0 条
当前快照
1 份
快照标识符
@ltjsfz6t
此快照首次捕获于
2024/03/09 15:52
2 年前
此快照最后确认于
2024/03/09 17:32
2 年前
查看原帖
小蒟蒻实在不知道自己写的有啥问题 样例是过了的,但提交上去全部RE
CPP
#include<bits/stdc++.h>
using namespace std;
#define ll long long
const int maxm=2000;
const int maxn=1000;
int n,u,v;
struct edge{
    int u,v,w,nxt;
}e[maxm<<1];
int tot,cnt;
ll head[maxn],dis[maxn],kuan[maxn],ans=0;//kuan记录宽度 
bool r[maxn];
inline void add(int u,int v,int w){
    e[++cnt].v=v; 
    e[cnt].u=u;
    e[cnt].w=w;
    e[cnt].nxt=head[u];
    head[u]=cnt;
}
inline void spfa(int s){
    queue<int> q;
    q.push(s);
    memset(dis,0x3f,sizeof(dis));
    memset(r,0x3f,sizeof(r));
    dis[s]=0; r[s]=1;
    while(!q.empty()){
        int u=q.front(); q.pop(); 
        r[u]=0;//防止重复入队
        for(int i=head[u];i;i=e[i].nxt){
            int v=e[i].v;
            if(dis[v]>dis[u]+e[i].w){
                dis[v]=dis[u]+e[i].w;
                //tot[v]++;//更新的次数 
                //if(tot[v]>n) return true;//存在负环 
                if(!r[v]){
                    r[v]=1;
                    q.push(v); 
                } 
            }
        } 
    }
}
int main()
{
	scanf("%d",&n);
	for(int i=1;i<n;++i){
		scanf("%d%d",&u,&v);
		add(u,v,1); add(v,u,2);
	}
	scanf("%d%d",&u,&v);
	spfa(1);
	for(int i=1;i<=n;++i){
		kuan[dis[i]]++;
		ans=max(ans,dis[i]);
	}
	printf("%d\n",ans+1); ans=0;
	for(int i=1;i<=n;++i){
		ans=max(ans,kuan[i]);
	}
	printf("%d\n",ans);
	spfa(u); printf("%d\n",dis[v]);
    return 0;
}

回复

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

正在加载回复...