再次求助昨天比赛的DIV2 T3的部分分,关注为报
  • 板块学术版
  • 楼主qip101
  • 当前回复2
  • 已保存回复2
  • 发布时间2022/10/5 23:00
  • 上次更新2023/10/27 08:35:32
查看原帖
再次求助昨天比赛的DIV2 T3的部分分,关注为报
333800
qip101楼主2022/10/5 23:00

现在已经回会两个最低档部分分了

但是不会和起来写,下面代码并没有25pts还是10pts

#include<bits/stdc++.h>
#define MAXN 2000002
using namespace std;
const int INF=0x7fffffff;
namespace FastIO
{
    char buf[1<<23],*p1,*p2;
    #ifdef ONLINE_JUDGE
    inline char gc(){return (p1==p2&&(p2=(p1=buf)+fread(buf,1,1<<22,stdin),p1==p2))?EOF:*p1++;}
    #else
    inline char gc(){return getchar();}
    #endif
    inline int read()
    {
        int f=1,w=0;char ch=gc();
        while(!isdigit(ch)){if(ch=='-')f=-1;ch=gc();}
        while(isdigit(ch))w=w*10+ch-'0',ch=gc();
        return f*w;
    }
}
using FastIO::read;  
using FastIO::gc;
int n,q,ans;
vector <int> g[MAXN];
vector <int> v[MAXN];
long long Size[MAXN],deg[MAXN],answer[MAXN];
inline void addedge(int u,int v)
{
    g[u].push_back(v);
}
inline void dfs(int u,int fa,int deep,int max_deep)//第一档暴力分
{
    if(deep==max_deep)
    {
        ans=max(ans,u);
        return;
    }
    for(int v:g[u])
        if(v!=fa)
			dfs(v,u,deep+1,max_deep);
}
inline void solve_chains()//链的情况
{
    int root;
    for (int i = 1; i <= n; i++) 
        if (!deg[i]) 
			root = i;
    Size[root]=1;answer[1]=root;
    int now=root;
    while (v[now].size()) 
	{
        int son=v[now][0];
        Size[son]=Size[now]+1;
        answer[Size[son]]=son;
        now=son;
    }
    while(q--) 
	{
        int x=read(),k=read();
        if (Size[x]-k <= 0 && Size[x]+k>n) 
			printf("-1\n");
        else 
			printf("%lld\n", Size[x] - k > 0 ? answer[Size[x] - k] : answer[Size[x] + k]);
    }		
} 
int main()
{
    n=read(),q=read();
	bool flag=true;
    for(int i=1;i<n;i++)//输入并判断是不是链
    {
        int u=read(),v=read();
        addedge(u,v);addedge(v,u);
        if(u!=v+1 || v!=u+1)
        	flag=true;
    }
    if(flag==true)//第一档部分分
    	for(int i=1;i<=q;i++)
    	{
        	int x=read(),k=read();
        	ans=-1;
        	dfs(x,0,0,k);
        	printf("%d\n",ans);
    	}
	else if(flag==false)//链
		solve_chains();
    return 0;
}
2022/10/5 23:00
加载中...