悬关 wa#1求调 显示宽度输出错误
查看原帖
悬关 wa#1求调 显示宽度输出错误
226167
呆呆的她啊楼主2024/1/22 16:14

听评论区给了各种#1的坑 有父节点>子节点的编号 这些我都自己试过改了 还是错的

#include<iostream>
#include<vector>
#include<algorithm>
#include<queue>
#include<cstring>
using namespace std;
int n;
struct node{
	int l,r;
	int wid;
}tree[105];
struct node1{
	int v;
	int w;
};
bool vis[105];
int d[105];
int deep=-1;
vector<node1>e[105];
int num[105];
int maxn=-1;
void dijkstra(int x)
{
  memset(d,0x3f,sizeof d);
	d[x]=0;
	priority_queue<pair<int,int>>q;
	q.push({0,x});
	while(q.size())
	{
	    auto t=q.top();
		q.pop();
	    int u=t.second;
		if(vis[u])continue;
		vis[u]=1;
		for(auto ed:e[u])
		{
			int v=ed.v;
			int w=ed.w;
			if(d[v]>d[u]+w)
			{
				d[v]=d[u]+w;
				q.push({-d[v],v});
			}
		}		
	}
}
void dfs(int a,int depth)
{  deep=max(depth,deep);
   if(tree[a].l!=0)
   {
	   dfs(tree[a].l,depth+1);
   }//不要写成else if 要不然只能走一个
   if(tree[a].r!=0)
	{
		dfs(tree[a].r,depth+1);		
	}
	return ;
}
int main()
{
	cin>>n;
	tree[1].wid=1;
	for(int i=1,a,b;i<=n-1;i++)
	{
		cin>>a>>b;
		tree[b].wid=tree[a].wid+1;
		if(tree[a].l==0)
			tree[a].l=b;
		else if(tree[a].r==0&&tree[a].l)
 		tree[a].r=b;
	    e[a].push_back((node1){b,1});
		e[b].push_back((node1){a,2});
	}
	for(int i=1;i<=105;i++)
	{  if(tree[i].wid==0)continue;
		num[tree[i].wid]++;
	}
	sort(num+1,num+1+100,greater<int>());
	int x,y;
	cin>>x>>y;
	dijkstra(x);
	dfs(1,1);
	cout<<deep<<endl;
	cout<<num[1]<<endl;
	cout<<d[y];
	return 0;
}
2024/1/22 16:14
加载中...