`
hududumo
  • 浏览: 240589 次
文章分类
社区版块
存档分类
最新评论

CodeForces Round #112 Div2 165 D. Beard Graph

 
阅读更多
/*
题目给定一棵树,这棵树很特殊,只有根节点的度可能超过2
有三种操作 
1.把编号为x的边染成黑色
2.把编号为x的边染成白色(此时这条边不可以走)
3.询问x,y之间的距离(不能走到输出-1)

*/
#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
#include<queue>
#include<stack>
#include<map>
#include<algorithm>
using namespace std;
const int maxn=100009;
//**********************************树状数组
struct bit{  
     int c[maxn] ;   
     void init(){  
          memset(c , 0 ,sizeof(c));  
     }  
     int lowbit(int x){  
         return x&(-x);  
     }  
     void add(int x ,int d){ //在x处加上d  
          for( ; x < maxn ; x+=lowbit(x)) c[x]+=d ;   
     }  
     int sum(int x){ //求小于等于x的个数  
          int ans = 0 ;  
          for( ; x>0 ; x-=lowbit(x))  ans +=c[x] ;   
          return ans ;  
     }  
     int getkth1(int k){// 求第K小数模版1  
          int ans = 0 , cnt = 0 , i ;  
          for(i = 20 ; i>=0 ; --i){  
                ans += 1<<i ;  
                if(ans>=maxn||cnt+c[ans]>=k) ans-=1<<i ;  
                else cnt +=c[ans] ;        
          }  
          return ans+1 ;   
     }  
       
        int getkth2(int k){//求第K小数模版2  
            int l=0,r=maxn,mid,f;  
            while(l<r-1)  
            { mid=(l+r)>>1;  
              f=sum(mid);  
                if(f>=k) r=mid;  
                else l=mid;  
            }  
            return r;  
        }  
}tree; 
//****************************************
vector<int> node[maxn];
vector<pair<int,int> > edge;
int degree[maxn],L[maxn],pos[maxn],now,yy,lei[maxn],n,m;
//L[x]表示x和根的距离
//pos[x]表示dfs遍历时的顺序
//yy表示当前遍历的是根的第几个分支
//lei[x]表示x包含在根的第几个分支中
void dfs(int u,int f)
{
	L[u]=L[f]+1;
	pos[u]=now++;
	lei[u]=yy;
	for(int i=0;i<node[u].size();i++)
	{
		int y=node[u][i];
		if(y==f)continue;
		dfs(y,u);
	}
}
int main()
{
	int a,b,c;
	while(scanf("%d",&n)!=EOF)
	{
		tree.init();
		memset(degree,0,sizeof(degree));
		now=1;
		for(int i=1;i<=n;i++)
		{
			node[i].clear();
		}
		edge.clear();
		for(int i=1;i<=n-1;i++)
		{
			scanf("%d%d",&a,&b);
			degree[a]++;
			degree[b]++;
			node[a].push_back(b);
			node[b].push_back(a);
			edge.push_back(make_pair(a,b));
		}
		int root=1;
		for(int i=1;i<=n;i++)
		{
			if(degree[i]>2)
			{
				root=i;
				break;
			}
		}	
		L[root]=0;
		for(int i=0;i<node[root].size();i++)
		{
			yy=node[root][i];
			dfs(yy,root);
		}
		scanf("%d",&m);
		for(int i=0;i<m;i++)
		{
			scanf("%d",&c);
			if(c==3)
			{
				scanf("%d%d",&a,&b);
				if(pos[a]>pos[b])swap(a,b);
				if(a==root)//有一个为根,检查跟到b之间是否有白色的边
				{
					if(tree.sum(pos[b])-tree.sum(pos[lei[b]]-1)==0)
					cout<<L[b]<<endl;
					else 
					cout<<"-1"<<endl;
				}
				else if(lei[a]==lei[b])//属于同一个分支
				{
					if(tree.sum(pos[b])-tree.sum(pos[a])==0)
					cout<<L[b]-L[a]<<endl;
					else 
					cout<<"-1"<<endl;
				}
				else//属于不同的分支,同时检查这两个分支
				{
					if((tree.sum(pos[b])-tree.sum(pos[lei[b]]-1)==0)&&(tree.sum(pos[a])-tree.sum(pos[lei[a]]-1)==0))
					{
						cout<<L[a]+L[b]<<endl;
					}
					else cout<<"-1"<<endl;
				}
			}
			else if(c==2)
			{
				scanf("%d",&a);
				a--;
				int x=max(pos[edge[a].first],pos[edge[a].second]);
				tree.add(x,-1);
			}
			else 
			{
				scanf("%d",&a);
				a--;
				int x=max(pos[edge[a].first],pos[edge[a].second]);
				tree.add(x,1);
			}
		}
	}
 return 0;
}

分享到:
评论

相关推荐

    onnxruntime-1.6.0-cp38-cp38-linux_armv7l.whl.zip

    python模块onnxruntime版本

    Java毕业设计-ssm信管专业毕业生就业管理信息系统演示录像(高分期末大作业).zip

    此资源为完整项目部署后演示效果视频,可参考后再做项目课设决定。 包含:项目源码、数据库脚本、项目说明等,有论文参考,该项目可以直接作为毕设使用。 技术实现: ​后台框架:SpringBoot框架 或 SSM框架 ​数据库:MySQL 开发环境:JDK、IDEA、Tomcat 项目都经过严格调试,确保可以运行! 博主可有偿提供毕设相关的技术支持 如果您的开发基础不错,可以在此代码基础之上做改动以实现更多功能。 其他框架项目设计成品不多,请根据情况选择,致力于计算机专业毕设项目研究开发。

    Java毕业设计-ssm校园线上点餐系统演示录像(高分期末大作业).rar

    Java毕业设计-ssm校园线上点餐系统演示录像(高分期末大作业)

    【案例】某企业人力资源盘点知识.docx

    【案例】某企业人力资源盘点知识.docx

    基于springboot的智能物流管理系统带源码.rar

    本智能物流管理系统有管理员,顾客,员工,店主。功能有个人中心,顾客管理,员工管理,店主管理,门店信息管理,门店员工管理,部门分类管理,订单信息管理,工作日志管理。因而具有一定的实用性。 本站是一个B/S模式系统,采用SSM框架,MYSQL数据库设计开发,充分保证系统的稳定性。系统具有界面清晰、操作简单,功能齐全的特点,使得智能物流管理系统管理工作系统化、规范化。本系统的使用使管理人员从繁重的工作中解脱出来,实现无纸化办公,能够有效的提高智能物流管理系统管理效率。 关键词:智能物流管理系统;SSM框架;MYSQL数据库;Spring Boot 管理员模块的实现: 顾客信息管理:智能物流管理系统的系统管理员可以管理顾客信息,可以对顾客信息信息添加修改删除以及查询操作 员工信息管理:系统管理员可以查看对员工信息信息进行添加,修改,删除以及查询操作。 店主模块的实现: 员工信息管理:店主可以对员工信息信息进行修改,删除以及查询操作 门店信息管理:店主可以对门店信息信息进行修改操作,还可以对门店信息信息进行查询。 员工模块的实现: 门店信息管理:员工登录可以查看门店信息 订单信息管理

    岗位体系建设.pdf

    岗位体系建设.pdf

    Java毕业设计-springboot志愿服务小程序演示录像(高分期末大作业).zip

    此资源为完整项目部署后演示效果视频,可参考后再做项目课设决定。 包含:项目源码、数据库脚本、项目说明等,有论文参考,该项目可以直接作为毕设使用。 技术实现: ​后台框架:SpringBoot框架 或 SSM框架 ​数据库:MySQL 开发环境:JDK、IDEA、Tomcat 项目都经过严格调试,确保可以运行! 博主可有偿提供毕设相关的技术支持 如果您的开发基础不错,可以在此代码基础之上做改动以实现更多功能。 其他框架项目设计成品不多,请根据情况选择,致力于计算机专业毕设项目研究开发。

    onnxruntime-1.14.0-cp37-cp37m-linux_armv7l.whl.zip

    python模块onnxruntime版本

    2013~2023中国企业全球化发展数据图表.pdf

    2013~2023中国企业全球化发展数据图表

    绝对素数.exe

    绝对素数

    Java毕业设计-ssm抑抑心理交流平台演示录像(高分期末大作业).rar

    Java毕业设计-ssm抑抑心理交流平台演示录像(高分期末大作业)

    onnxruntime-1.12.1-cp37-cp37m-linux_armv7l.whl.zip

    python模块onnxruntime版本

    B2031 计算三角形面积.exe

    B2031 计算三角形面积

    glm-4-9b-chat-1m模型代码文件

    glm-4-9b-chat-1m模型代码文件

    基于springboot的车辆管理系统设计与实现带源码.zip

    本车辆管理系统管理员功能有管理员和员工。 管理员功能有个人中心,员工管理,证件信息管理,车辆信息管理,业务单据管理,事故登记管理,维修登记管理,保养登记管理,加油登记管理,违章信息管理。 员工功能有个人中心,证件信息管理,车辆信息管理,业务单据管理,事故登记管理,维修登记管理,保养登记管理,加油登记管理,违章信息管理。因而具有一定的实用性。 本站是一个B/S模式系统,采用Spring Boot框架,MYSQL数据库设计开发,充分保证系统的稳定性。系统具有界面清晰、操作简单,功能齐全的特点,使得车辆管理系统管理工作系统化、规范化。本系统的使用使管理人员从繁重的工作中解脱出来,实现无纸化办公,能够有效的提高车辆管理系统管理效率。 关键词:车辆管理系统 本车辆管理系统管理员功能有管理员和员工。 管理员功能有个人中心,员工管理,证件信息管理,车辆信息管理,业务单据管理,事故登记管理,维修登记管理,保养登记管理,加油登记管理,违章信息管理。 员工功能有个人中心,证件信息管理,车辆信息管理,业务单据管理,事故登记管理,维修登记管理,保养登记管理,加油登记管理,违章信息管理。因而具有一定的实用性。

    onnxruntime-1.16.0-cp39-cp39-linux_armv7l.whl.zip

    onnxruntime-1.16.0-cp39-cp39-linux_armv7l.whl.zip

    tensorflow-2.8.3-cp310-cp310-win-amd64.whl

    tensorflow安装

    基于 Java+Mysql 实现的终极排班管理、考勤系统

    【作品名称】:基于 Java+Mysql 实现的终极排班管理、考勤系统 【适用人群】:适用于希望学习不同技术领域的小白或进阶学习者。可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。 【项目介绍】:使用 创建名为finalschedule的数据库,然后导入sql文件夹中的结构表和数据;部署启动项目即可。(sql中有数据库用户名名称dlwy,请修改为自己的用户名称或创建一样的用户) 功能介绍 人员管理 对人员信息的维护,增删改查等 分组管理 对人员进行分组,对不同的任务或者部门人员分组来管理排班,分组支持增删改查等 班次设置 排班班次设置,支持自定义班次名称、颜色和时间等

    AUTOSAR-SWS-DiagnosticOverIP.pdf

    AUTOSAR_SWS_DiagnosticOverIP.pdf

    30054 - AT-ST.mpd

    30054 - AT-ST.mpd

Global site tag (gtag.js) - Google Analytics