怎么报零了?求大佬指点
查看原帖
怎么报零了?求大佬指点
1035772
lin_zxy楼主2024/3/9 15:52

小蒟蒻实在不知道自己写的有啥问题 样例是过了的,但提交上去全部RE

#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;
}
2024/3/9 15:52
加载中...