zoukankan      html  css  js  c++  java
  • [NOI2018]归程

    description

    题面

    data range

    [nle 200000,m,kle 400000 ]

    solution

    (Kruskal)重构树

    甚至比[ONTAK2010]Peaks加强版还要容易码

    不再多说

    code

    为什么我写了个叫(Dij)的函数,一开始写的却是(SPFA)...

    习惯很难改啊

    #include<bits/stdc++.h>
    #include<algorithm>
    #include<iostream>
    #include<cstdlib>
    #include<iomanip>
    #include<cstring>
    #include<complex>
    #include<vector>
    #include<cstdio>
    #include<string>
    #include<bitset>
    #include<ctime>
    #include<cmath>
    #include<queue>
    #include<stack>
    #include<map>
    #include<set>
    #define FILE "a"
    #define mp make_pair
    #define pb push_back
    #define RG register
    #define il inline
    using namespace std;
    typedef unsigned long long ull;
    typedef vector<int>VI;
    typedef long long ll;
    typedef double dd;
    const dd eps=1e-10;
    const int mod=1e9+7;
    const int N=400010;
    const int M=400010;
    const dd pi=acos(-1);
    const int inf=2147483645;
    const ll INF=1e18+1;
    const ll P=100000;
    il ll read(){
    	RG ll data=0,w=1;RG char ch=getchar();
    	while(ch!='-'&&(ch<'0'||ch>'9'))ch=getchar();
    	if(ch=='-')w=-1,ch=getchar();
    	while(ch<='9'&&ch>='0')data=data*10+ch-48,ch=getchar();
    	return data*w;
    }
    
    il void file(){
    	srand(time(NULL)+rand());
    	freopen("1.in","r",stdin);
    	freopen(FILE".out","w",stdout);
    }
    
    int num,n,m,q,k,s,ans;
    struct edge{int u,v,w;}E[M];
    bool cmp_w(edge x,edge y){return x.w>y.w;}
    int head[N],to[N<<1],nxt[N<<1],val[N<<1],cnt;
    il void add(int u,int v,int w){
    	to[++cnt]=v;
    	nxt[cnt]=head[u];
    	val[cnt]=w;
    	head[u]=cnt;
    }
    
    struct node{
    	int id,x;
    	bool operator <(const node &b)const{return x>b.x;}
    };
    priority_queue<node>Q;
    int dis[N];bool vis[N];
    il void Dijaaaaaaaaaaaaaaa(){
    	for(RG int i=1;i<=n;i++)dis[i]=inf,vis[i]=0;
    	while(!Q.empty())Q.pop();
    	dis[1]=0;Q.push((node){1,0});
    	for(RG int t=1;t<=n;t++){
    		RG node x=Q.top();Q.pop();
    		while(vis[x.id]){
    			if(Q.empty())break;
    			x=Q.top();Q.pop();
    		}
    		if(vis[x.id]&&Q.empty())break;
    		RG int u=x.id;vis[u]=1;
    		for(RG int i=head[u];i;i=nxt[i]){
    			RG int v=to[i];
    			if(!vis[v]&&dis[v]>dis[u]+val[i]){
    				dis[v]=dis[u]+val[i];Q.push((node){v,dis[v]});
    			}
    		}
    	}
    }
    
    int fa[N];
    int find(int x){return fa[x]?fa[x]=find(fa[x]):x;}
    
    int h[N],RT,f[20][N];
    void dfs(int u,int ff){
    	f[0][u]=ff;
    	for(RG int i=1;f[i-1][f[i-1][u]];i++)f[i][u]=f[i-1][f[i-1][u]];
    	for(RG int i=head[u];i;i=nxt[i]){
    		RG int v=to[i];dfs(v,u);
    	}
    }
    
    il int solve(int v,int p){
    	RG int u=v;
    	for(RG int i=19;~i;i--)
    		if(f[i][u]&&h[f[i][u]]>p)u=f[i][u];
    	return dis[u];
    }
    
    int main()
    {
    	RG int T=read();
    	while(T--){
    		memset(head,0,sizeof(head));
    		memset(fa,0,sizeof(fa));
    		memset(f,0,sizeof(f));
    		cnt=ans=0;
    		
    		num=n=read();m=read();
    		for(RG int i=1,u,v,l,a;i<=m;i++){
    			u=read();v=read();l=read();a=read();
    			E[i]=(edge){u,v,a};
    			add(u,v,l);add(v,u,l);
    		}
    		
    		Dijaaaaaaaaaaaaaaa();
    		
    		memset(head,0,sizeof(head));cnt=0;
    		sort(E+1,E+m+1,cmp_w);
    		for(RG int i=1;i<=m;i++)
    			if(find(E[i].u)!=find(E[i].v)){
    				RG int x=find(E[i].u),y=find(E[i].v);
    				h[++num]=E[i].w;
    				fa[x]=fa[y]=num;dis[num]=min(dis[x],dis[y]);
    				add(num,x,0);add(num,y,0);
    			}
    		RT=find(1);dfs(RT,0);
    
    		q=read();k=read();s=read();
    		for(RG int i=1,v,p;i<=q;i++){
    			v=(read()+k*ans-1)%n+1;
    			p=(read()+k*ans)%(s+1);
    			printf("%d
    ",ans=solve(v,p));
    		}
    	}
    	return 0;
    }
    
    
  • 相关阅读:
    第三十七节:系统证书管理和gRPC基于数字证书的认证和授权
    第三十六节:gRPC身份认证和授权(JWT模式 和 集成IDS4)
    第三十五节:gRPC拦截器、版本控制、安全性、日志集成
    第三十四节:.Proto文件剖析、gRPC的四种传输模式(一元和流式)和常用配置
    第三十三节:.Net Core下的gRPC详细介绍
    IIS7通过AppCmd.exe管理IIS
    MySql新增列的时候判断是否存在
    PowerDesigner从Excel导入表
    Java中Base64.encodeBase64URLSafe在C#的实现
    【产品方法论】字节跳动
  • 原文地址:https://www.cnblogs.com/cjfdf/p/9498937.html
Copyright © 2011-2022 走看看