首页 > 其他分享 >AtCoder Beginner Contest 201 E - Xor Distances

AtCoder Beginner Contest 201 E - Xor Distances

时间:2023-09-01 23:12:17浏览次数:43  
标签:201 AtCoder Xor idx int ll 异或 dist

E - Xor Distances


原题链接


题意:设dist(i,j)即i到j之间路径的异或和,求树上所有两点之间dist(i,j)的和


思路:dist(i,j) = dist(i,1)^dist(j,1) 根据异或性质相同的部分会被消掉
用bfs求得dist(i,1)
优化两层i,j的枚举:通过遍历每个数的每一位1的个数cnt,以及0的个数n-cnt,从而在1^0=1得到新1的个数


#include <bits/stdc++.h>
using namespace std;
const int N = 200010,M=4*N,mod=1e9+7;
typedef long long ll;
ll d[N];//dist(1->i)的异或和 
ll e[M],h[N],ne[M],idx,w[M];
//dist(i,j)为i到j路径上的边的异或和,求所有dist(i,j)的和
void add(ll a,ll b,ll c)
{
	e[idx]=b,ne[idx]=h[a],w[idx]=c,h[a]=idx++;
}
void bfs()//更快一点
{
	memset(d,-1,sizeof(d));
	queue<int> q;
	q.push(1);
    d[1]=0;
    while(q.size())
    {
		auto u=q.front();
		q.pop();
		
		for(int i=h[u];~i;i=ne[i])
		{
			int j=e[i];
			if(d[j]==-1)
			{
				d[j]=d[u]^w[i];
				q.push(j);
			}
		}
	}
}
int main()
{
	int n;
	cin>>n;
	memset(h,-1,sizeof(h));
	memset(d,-1,sizeof(d));
	for(int i=1;i<n;i++)
	{
		ll u,v;
		ll w;
		cin>>u>>v>>w;
		add(u,v,w),add(v,u,w);
	}
	
	bfs();
	//dist(i,j)=dist(i,1)^dist(j,1)
	
	ll ans=0ll;
	for(int i=0;i<60;i++)//!遍历每一位!
	{
		int cnt=0;
		for(int j=1;j<=n;j++)
		{
			if(d[j]>>i&1ll)
			{
				cnt++;
			}
		}
		ans=(ans%mod+(1ll<<i)%mod*cnt%mod*(n-cnt)%mod+mod)%mod;//ans+=(1<<i)*cnt*(n-cnt)
	}
	cout<<ans<<'\n';
}

标签:201,AtCoder,Xor,idx,int,ll,异或,dist
From: https://www.cnblogs.com/oystercard/p/17673027.html

相关文章

  • AtCoder Beginner Contest 201 D - Game in Momotetsu World
    D-GameinMomotetsuWorld原题链接题意有一个H×W的方格,每个方格里写着'+'或'-'有一个初始在(1,1),(也就是左上角)的棋子,Takahashi和Aoki轮流向右或向下移动(Takahashi先手)。移动到写着'+'的方格上后,进行该步移动的玩家分数+1。否则该玩家分数−1,走到右下......
  • AtCoder Beginner Contest 317 D - President
    D-President原题链接题意:一共n轮,每一轮Xi>Yi(票数)时,X可以获得Zi张席位,反之亦然;最终席位总和多的就获胜;因此要使X获胜,求Y至少要给X多少个票思路:数据范围小,Z的和小于1e5可以用01背包的方法,前i轮中,X获得的席位不超过j的最小票数,再对X获胜情况中(X的席位>=m/2+1)取最小......
  • NOIP2012提高组初赛易错题解析
    一.3. 错误原因:忘记了解析:Intel是全球最大的CPU厂商,AMD是世界上首个研发出7纳米CPU的厂商 6.错误原因:忘记了解析:ENIAC是世界上首台计算机,属于第一代计算机,即电子管计算机 10.错误原因:选项理解错误解析:A由蝙蝠,发明雷达是正确的,B因特网的发明与蜘蛛网无关,只是形......
  • NOIP2011提高组初赛易错题解析
    一.7.错误原因:不知道解析:快速排序在理论上最低的时间复杂度为O(n),但实际最低的时间复杂度为O(nlogn) 二.1.错误原因:漏项了解析:这棵树最少有12层,但题目是问可能是几层,所以还可能是2011层 5.错误原因:漏了一种情况解析:这道题的树有两种,所以答案也有两种 ......
  • AtCoder Beginner Contest 317 C - Remembering the Days
    C-RememberingtheDays原题链接题意:每个点最多经过一次,求最长路思路:数据范围很小,深搜每个点能到其他点的所有路,取最大#include<bits/stdc++.h>usingnamespacestd;constintN=110;intg[N][N];intn,m;boolst[N];intw=0;intans=0;voiddfs(intu){ st[......
  • AtCoder Beginner Contest 317
    A-Potions#include<bits/stdc++.h>usingnamespacestd;#defineintlonglongintpower(intx,inty,intp){x%=p;intans=1;while(y){if(y&1)ans=ans*x%p;y>>=1,x=x*x%p;}......
  • BUUCTF [安洵杯 2019]easy_web
    试试模板注入发现,不行,然后伪协议,不行,再爆破目录也不行。从?img=TXpVek5UTTFNbVUzTURabE5qYz0入手,可能是base64编码。base64解码:(不知道为什么别的WP上变成这样了,否则解不出来)TXpVek5UTTFNbVUzTURabE5q得到:MzUzNTM1MmU3MDZlNj再base64解码:MzUzNTM1MmU3MDZl得到:353535......
  • AtCoder Beginner Contest 292 E - Transitivity
    E-Transitivity原题链接题意:对于一个有向图,进行加边操作,使最终任意的个点具有传递效果,即若a到b有边,b到c有边,那么a到c也要有边,问最少需要进行多少次操作,使得每个节点所能到达的地方都有直接的边,也就是最短距离为1思路:怎么加边才是最优的,举个例子a->b->c->d->e对于a点到其他......
  • P4344 SHOI2015 脑洞治疗仪
    \(P4344\)[\(SHOI2015\)]脑洞治疗仪一、题目描述曾经发明了自动刷题机的发明家\(SHTSC\)又公开了他的新发明:脑洞治疗仪——一种可以治疗他因为发明而日益增大的脑洞的神秘装置。为了简单起见,我们将大脑视作一个\(01\)序列。\(1\)代表这个位置的脑组织正常工作,\(0\)代表......
  • AtCoder Beginner Contest 292 D - Unicyclic Components
    D-UnicyclicComponents原题链接题意:判断一个连通块的边和点个数是否相同思路:对它使用并查集吧点击查看代码#include<bits/stdc++.h>usingnamespacestd;constintN=200010,M=N<<1;//维护连通图中点和边的个数intsd[N],se[N],p[N];boolf[N];//谁是祖宗int......