CSP26

news/2024/9/20 8:56:00/文章来源:https://www.cnblogs.com/wlesq/p/18371705

T1

题目

image

官方题解

image

考虑暴力,发现奇数边包赢,偶数边如果异或和为\(0\)则输,当然也有特例,比如\(2->4->8->14->\),这\(4\)条边异或为\(0\)但其实必赢,
所以,为了避免这种情况发生,我们使用\(hash\)
XORHashing
这样与处理出\(dis\),两点\(u,v\)即为\(dis_u xor dis_v\)
暴力的话\(O(n^2)\)

点击查看代码
#include <bits/stdc++.h>
#define speed() ios::sync_with_stdio(false),cin.tie(0),cout.tie(0);
#define ll long long
#define lid (rt<<1)
#define rid (rt<<1|1)
// #define endl '\n'
#define pii pair<int,int>
#define ull unsigned long long
#define pb push_back
#define ts cout<<"----------------"<<endl;
#define bs bitset<65>
using namespace std;
const int N = 5e5+5;
const ull B=233;
ull qpow(ull a,ull b)
{ull ans=1;while(b){if(b&1)ans=ans*a;a=a*a;b>>=1;}return ans;
}
int n,dep[N];ull dis[N];int f[N][24];
vector <pii> edge[N];
map <int,int> mp;
void dfs(int u,int fa)
{dep[u]=dep[fa]+1;// cout<<u<<endl;// f[u][0]=fa;// for(int i=1;i<=20;i++)// 	f[u][i]=f[f[u][i-1]][i-1];for(auto [to,w]:edge[u]){if(to==fa)continue;dis[to]=dis[u]^w;dfs(to,u);// mp[dis[to]]++;}
}
int lca(int x,int y)
{if(dep[x]>dep[y])swap(x,y);for(int i=20;i>=0;i--)if(dep[f[x][i]]>=dep[y])x=f[x][i];if(x==y)return 0;for(int i=20;i>=0;i--)if(f[x][i]!=f[y][i])x=f[x][i],y=f[y][i];return f[x][0];
}
ll C(ll n)
{return 1ll*n*(n-1)/2ll;
}
int get(int u,int v)
{return dep[u]+dep[v]-2*dep[lca(u,v)];
}
int main()
{speed();// freopen("T1.in","r",stdin);// freopen("in.in","r",stdin);// freopen("out.out","w",stdout);int T;cin>>T;while(T--){cin>>n;int u,v;ull w;// while(q.size())q.pop();for(int i=1;i<=n;i++)edge[i].clear();for(int i=1;i<=n-1;i++){cin>>u>>v>>w;// cout<<u<<" "<<v<<" "<<w<<endl;w=qpow(B,w);edge[u].pb({v,w});edge[v].pb({u,w});}ll ans=C(n);dfs(1,0);for(int i=1;i<=n;i++){for(int j=i+1;j<=n;j++){if(dis[i]^dis[j])continue;// if(get(i,j)%2)continue;// cout<<i<<" "<<j<<endl;ans--;}	}cout<<ans<<endl;}return 0;
}
/*
hack
1
5
1 2 2
2 3 4
3 4 8
4 5 14
*/

正解,其实很好想,开个桶记录一下\(dis\)最后统计答案即可,注意相同内部两两组合

点击查看代码
#include <bits/stdc++.h>
#define speed() ios::sync_with_stdio(false),cin.tie(0),cout.tie(0);
#define ll long long
#define lid (rt<<1)
#define rid (rt<<1|1)
// #define endl '\n'
#define pii pair<int,ull>
#define ull unsigned long long
#define pb push_back
#define ts cout<<"----------------"<<endl;
#define bs bitset<65>
using namespace std;
const int N = 5e5+5;
const ull B=233;
ull qpow(ull a,ull b)
{ull ans=1;while(b){if(b&1)ans=ans*a;a=a*a;b>>=1;}return ans;
}
int n,dep[N],un,tong[N];ull dis[N];int f[N][24];
vector <pii> edge[N];
map <ull,int> mp;
void dfs(int u,int fa)
{dep[u]=dep[fa]+1;for(auto [to,w]:edge[u]){if(to==fa)continue;dis[to]=dis[u]^w;// cout<<dis[to]<<endl;mp[dis[to]]++;dfs(to,u);// mp[dis[to]]++;}
}
ll C(ll n)
{return 1ll*n*(n-1)/2ll;
}
int main()
{speed();// freopen("T1.in","r",stdin);// freopen("in.in","r",stdin);// freopen("out.out","w",stdout);int T;cin>>T;while(T--){cin>>n;int u,v;ull w;mp.clear();// while(q.size())q.pop();for(int i=1;i<=n;i++)edge[i].clear(),dis[i]=0;for(int i=1;i<=n-1;i++){cin>>u>>v>>w;// cout<<u<<" "<<v<<" "<<w<<endl;w=qpow(B,w);edge[u].pb({v,w});edge[v].pb({u,w});}ll ans=C(n);dfs(1,0);mp[0]++;for(int i=1;i<=n;i++){if(mp[dis[i]]>1){// cout<<mp[dis[i]]<<endl;ans-=C(mp[dis[i]]);mp[dis[i]]=0;}}cout<<ans<<endl;}return 0;
}
/*
hack
1
5
1 2 2
2 3 4
3 4 8
4 5 14
*/

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/784868.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

通过分布式资源分配实现多机器人取货与送货

原文链接:Multi-Robot Pickup and Delivery via Distributed Resource Allocation (youtube.com) Supplemental video for the paper "Multi-Robot Pickup and Delivery via Distributed Resource Allocation". 论文《通过分布式资源分配实现多机器人取货与送货》的…

Java预览PDF时的文件名称问题

直接看问题直接看问题解决思路 看了一下一个有问题的PDF文件之后发现文件的名称和文件的属性名其实不一致,浏览器默认展示的是文件的属性名,而不是我们看到的文件名称这也就让我定位到了问题的所在,出现这个bug的原因就是PDF文件的属性名称与文件名称不一致,定位到问题之后…

从零到一,全面掌握Apache DolphinScheduler发版流程,实战派经验分享!

引言 Apache DolphinScheduler的发版流程对于确保软件质量和社区协作至关重要,社区Committer王兴杰为我们详细介绍了Apache DolphinScheduler的发版流程,包括环境准备、流程文档、基础工具准备、依赖包确认等关键步骤,并指出了发版流程中可能会遇到的麻烦以及相应的解决方案…

对抗训练综述学习笔记

本文基于这篇综述进行讨论学习:《Bai T, Luo J, Zhao J, et al. Recent advances in adversarial training for adversarial robustness[J]. arXiv preprint arXiv:2102.01356, 2021.》对抗训练主要目的是让模型能够对于对抗样本做出正确的判断。常见的对抗样本的生成方式(或…

Chrome谷歌浏览器报错:ERR_TOO_MANY_REDIRECTS

开发系统的时候,经常需要调用地址进行测试,容易遇到浏览器报错:该网页无法正常运作**** 将您重定向的次数过多。尝试删除您的 Cookie.ERR_TOO_MANY_REDIRECTS(如图) 解决方法: 1.删除浏览器缓存记录 2.开启无痕模式,重新浏览

KingbaseES V8R6备份恢复案例之---sys_backup.sh init无法创建stanza

KingbaseES、备份恢复案例说明: KingbaseES V8R6数据库执行物理备份初始化操作,出现以下故障“ERROR: create stanza failed, check log file...",初始化失败。 适用版本:KingbaseES V8R6 一、问题现象 如下所示,执行sys_backup.sh init,出现”ERROR: create stanza…

【Linux】grub命令行引导进入windows系统

@目录1.grub命令行界面2.设置启动目录3.chainloader加载windows启动文件4.启动5.grub命令行无响应办法在卸载Linux系统后,有的小白可能会忘记删除Linux的EFI引导。这样的话,下次开机时就会自动进入grub的命令行,连windows系统都进不去了!本文提供了使用grub命令行进入win系…

cmake openssl 生成失败

生成azerothcode的时候报错,改成1.x版本就好了,我用的1.1.1。 CMake Error at E:/Soft/CMake326/share/cmake-3.26/Modules/FindPackageHandleStandardArgs.cmake:230 (message): Could NOT find OpenSSL, try to set the path to OpenSSL root folder in the system varia…

12米空间分辨率DEM数据申请下载:TanDEM-X数据集

本文介绍全球12米与30米高空间分辨率的数字高程模型(DEM)数据——TanDEM-X数据的下载申请方法~本文介绍全球12米与30米高空间分辨率的数字高程模型(DEM)数据——TanDEM-X数据的下载申请方法。Tandem-X卫星项目于2010年6月启动,并于2010年6月21日和2010年12月21日分别发射两…

Halcon图像减操作

图像减操作,也叫图像灰度值的操作 可以得到固定位置的差异 * 区域处理read_image (car1, D:/hoclan/traffic1.png) read_image (car2, D:/hoclan/traffic2.png) *显示边缘模式 dev_set_draw (margin)*图像减操作(图像灰度值的操作) 可以得到固定位置的差异 * (Traffic1 - Traf…

Echarts 5 动态按需引入图表

官网提供的按需引入方法为全量按需引入,在打包分离中,仍旧存在使用不到的图表被打包进去。 例如:组件A使用了折线图、柱状图,组件B只用到了折线图,但是打包组件B的时候,柱状图也就被打包进去。 本文提供一种动态按需引入的思路,使得只用到折线图的组件B,打包的时候只打…