CodeForces - 724G:Xor-matic Number of the Graph
两点之间的任意路径都可表示为 随便某一条路径xor任何多个环,
然后可以用线性基来做,这样不会重复的,
另外必须一位一位的处理,xor是不满足结合律的
#include<cstdio>
#include<cstdlib>
#include<algorithm>
#include<cstring>
#include<vector>
#define MOD 1000000007
#define MAXN 100000+10
#define ll long long
#define pb push_back
#define ft first
#define sc second
#define mp make_pair
#define pil pair<int,ll>
using namespace std;
int n,m;
vector<pil> G[MAXN];
ll d[MAXN];
int pw[MAXN];
vector<ll> vs;
vector<int> node;
void dfs(int x,ll c){
d[x]=c;node.pb(x);
for(int i=;i<G[x].size();i++){
pil& t=G[x][i];
if(-!=d[t.ft]){vs.pb(d[x]^d[t.ft]^t.sc);}
else{dfs(t.ft,c^t.sc);}
}
}
ll a[];
ll ans;
ll solve(){
memset(a,,sizeof(a));
int cnt=;ll ret=;
for(int i=;i<vs.size();i++){
ll v=vs[i];
if(!v)continue;
for(int j=;j>=;j--){
if((v>>j)&){
if(!a[j]){
cnt++;
a[j]=v;
break;
}
else{
v^=a[j];
}
}
}
}
for(int k=;k<=;k++){
int t[]={};
for(int i=;i<node.size();i++){
t[(d[node[i]]>>k)&]++;
}
bool flag=;
for(int i=;i<=;i++){
if((a[i]>>k)&){
flag=;break;
}
}
ll tmp=;
if(!flag){
tmp+=(1LL*t[]*t[]%MOD*pw[cnt]%MOD);
tmp%=MOD;
tmp*=pw[k];
tmp%=MOD;
}
else{
tmp+=(1LL*t[]*(t[]-))/+(1LL*t[]*(t[]-))/+(1LL*t[]*t[]%MOD);
tmp%=MOD;
if(cnt)tmp*=pw[cnt-],tmp%=MOD;
tmp*=pw[k];
tmp%=MOD;
}
ret+=tmp;
ret%=MOD;
}
return ret;
}
int main()
{
// freopen("data.in","r",stdin);
pw[]=;
for(int i=;i<=;i++){
pw[i]=pw[i-]*%MOD;
}
scanf("%d%d",&n,&m);
int x,y;ll w;
for(int i=;i<=m;i++){
scanf("%d%d%lld",&x,&y,&w);
G[x].pb(mp(y,w));G[y].pb(mp(x,w));
}
memset(d,-,sizeof(d));
for(int i=;i<=n;i++){
if(-==d[i]){
vs.clear(),node.clear();
dfs(i,);
ans+=solve();
ans%=MOD;
}
}
printf("%lld\n",ans);
return ;
}
CodeForces - 724G:Xor-matic Number of the Graph的更多相关文章
- Codeforces 617E:XOR and Favorite Number(莫队算法)
http://codeforces.com/problemset/problem/617/E 题意:给出n个数,q个询问区间,问这个区间里面有多少个区间[i,j]可以使得ai^ai+1^...^aj ...
- Codeforces 242E:XOR on Segment(位上的线段树)
http://codeforces.com/problemset/problem/242/E 题意:给出初始n个数,还有m个操作,操作一种是区间求和,一种是区间xor x. 思路:昨天比赛出的一道类似 ...
- Codeforces D546:Soldier and Number Game
题目链接 输入t对数 a, b 求(b,a]内的每个数拆成素因子的个数和 这里每个数都可以写成素数的乘积,可以写成几个素数的和就有几个素因子,这里求的是(b,a]内的素因子和 思路: 素数的素因子个数 ...
- Codeforces 724 G Xor-matic Number of the Graph 线性基+DFS
G. Xor-matic Number of the Graph http://codeforces.com/problemset/problem/724/G 题意:给你一张无向图.定义一个无序三元组 ...
- 动手写个数字输入框1:input[type=number]的遗憾
前言 最近在用Polymer封装纯数字的输入框,开发过程中发现不少坑,也有很多值得研究的地方.本系列打算分4篇来叙述这段可歌可泣的踩坑经历: <动手写个数字输入框1:input[type=nu ...
- xtrabackup备份MySQL报错:InnoDB: Error number 24 means 'Too many open files'
xtrabackup备份MySQL报错:InnoDB: Error number 24 means 'Too many open files' 1.使用xtrabackup备份MySQL时出现如下报错 ...
- 第193天:js---Math+Error+Number+Object总结
一.Math 随机选取 //随机选取 function getRandom (begin,end){ return Math.floor(Math.random()*(end-begin))+begi ...
- 【POI】导出xls文件报错:The maximum number of cell styles was exceeded. You can define up to 4000 styles in a .xls workbook
使用POI导出xls文件,由于数据过多,导致导出xls报错如下: The maximum number of cell styles was exceeded. You can define up t ...
- oracle创建jobs定时任务报错:PLS-00306: wrong number or types of arguments in call to 'JOB'
原脚本: begin sys.dbms_job.submit(job => job, what => 'xxx;', ...
随机推荐
- Beta第三天
听说
- C语言的第一次博客作业
题目1:7-3 温度转换 1.代码 int fahr, celsius; fahr=150; celsius=5*(fahr-32)/9; printf("fahr = %d, celsiu ...
- vue内置指令详解——小白速会
指令 (Directives) 是带有 v- 前缀的特殊属性,职责是,当表达式的值改变时,将其产生的连带影响,响应式地作用于 DOM. 内置指令 1.v-bind:响应并更新DOM特性:例如:v-bi ...
- 构建微服务开发环境4————安装Docker及下载常用镜像
[内容指引] 下载Docker: Mac下安装Docker: Windows下安装Docker; 下载常用docker镜像. 一.下载Docker 1.Mac适用Docker下载地址:https:// ...
- 命令行窗口中用telnet测试HTTP协议
1. 命令行窗口中用telnet测试HTTP协议 HTTP消息是由普通ASCII文本组成.消息包括消息头和数据体部分.消息头以行为单位,每行以CRLF(回车和换行)结束,消息头结束后,额外增加一个CR ...
- 08-TypeScript中的类
类的概念通常是在后端开发中实现的思想,比如C#.C++或Java,传统的JavaScript开发通过使用原型模式来模拟类的功能.在TypeScript中,天生就是支持类 的,可以让前端的开发更加具有面 ...
- python之路--day15---软件开发目录规范
软件开发目录规范 bin--启动文件 conf--配置文件 core--核心代码 db--数据文件 lib--常用功能代码 log--日志文件 readme--软件介绍
- WPF自学入门(十一)WPF MVVM模式Command命令
在WPF自学入门(十)WPF MVVM简单介绍中的示例似乎运行起来没有什么问题,也可以进行更新.但是这并不是我们使用MVVM的正确方式.正如上一篇文章中在开始说的,MVVM的目的是为了最大限度地降低了 ...
- php里面的变量的使用
php里面的变量一般可以直接使用不需要声明,但是这种var_dump($a);就会报错,还有sql语句里面如果某个变量为空也会报错. 如果变量为null,空,未声明都==false,但是不===fal ...
- Excel+DDT数据驱动实例
一.首先安装dtt模块 数据驱动原理 1.测试数据为多个字典的list类型 2.测试类前加修饰@ddt.ddt 3.case前加修饰@ddt.data() 4.运行后用例会自动加载成N个单独的用例 二 ...