【jzoj5239】【GDOI2018模拟8.7】【图的异或】【线性基】
2017-08-07 22:44
711 查看
题目大意
解题思路
dfs一遍,求出dfs树上s到t的异或和,把每个环的异或和加进线性基里面,枚举每个二进制位i,如果基里有x个数的第i位是1,对答案贡献2^(i+x-1),因为留出一个1调整答案,其他随便选即可。如果基里没有1,当s到t异或和第i位是1,对答案贡献2^(i+x-1),x是基里数的个数,否则没有贡献。
code
#include<cstdio> #include<cmath> #include<cstring> #include<algorithm> #define LF double #define LL long long #define ULL unsigned int #define fo(i,j,k) for(int i=j;i<=k;i++) #define fd(i,j,k) for(int i=j;i>=k;i--) #define fr(i,j) for(int i=begin[j];i;i=next[i]) using namespace std; int const mn=1e5+9,mm=2*1e5+9,mo=1e9+7; int n,m,s,t,gra=1,begin[mn],to[mm],next[mm],vis[mm]; LL f[mn],len[mm],a[70]; void insert(int u,int v,LL w){ to[++gra]=v; len[gra]=w; next[gra]=begin[u]; begin[u]=gra; } LL pow(int x){ if(x>30)return 1ll*(1<<30)*(1<<(x-30)); else return 1<<x; } void add(LL x){ fd(i,59,0)if(x&pow(i)){ if(!a[i]){a[i]=x;return;} x^=a[i]; } } void dfs(int p,int q){ vis[p]=1; fr(i,p)if(i!=(q^1)){ if(!vis[to[i]]){ f[to[i]]=f[p]^len[i]; dfs(to[i],i); }else add(f[p]^len[i]^f[to[i]]); } } int main(){ //freopen("xor.in","r",stdin); //freopen("xor.out","w",stdout); freopen("d.in","r",stdin); freopen("d.out","w",stdout); scanf("%d%d",&n,&m); fo(i,1,m){ int u,v;LL w; scanf("%d%d%lld",&u,&v,&w); insert(u,v,w); insert(v,u,w); } scanf("%d%d",&s,&t); dfs(s,0); int tmp=0; fd(j,59,0)if(a[j])tmp++; int ans=0; fd(i,59,0){ int tm2=0; fd(j,59,0)if(a[j]&pow(i))tm2++; if(tm2)ans=(ans+pow(i)%mo*(pow(tmp-1)%mo))%mo; else if(f[t]&pow(i))ans=(ans+pow(i)%mo*(pow(tmp)%mo))%mo; } printf("%d",ans); return 0; }
相关文章推荐
- 【JZOJ 5239】 【GDOI2018模拟8.7】图的异或
- [JZOJ5239]. 【GDOI2018模拟8.7】图的异或
- 【JZOJ5239】【GDOI2018模拟8.7】图的异或
- 【jzoj5237】【GDOI2018模拟8.7】【最长公共子序列 】【动态规划】
- JZOJ5239【GDOI模拟】图的异或
- 【GDOI2018模拟8.7】图的异或 线性基
- 【JZOJ5237】【GDOI2018模拟8.7】最长公共子序列
- 【JZOJ5238】【GDOI2018模拟8.7】的士碰撞
- 【jzoj5238】【GDOI2018模拟8.7】【的士碰撞】
- 【GDOI2018模拟8.7】图的异或
- 【JZOJ5250】【GDOI2018模拟8.11】质数
- 【JZOJ 5220】【GDOI2018模拟7.10】C
- 【JZOJ 5241】【GDOI2018模拟8.8】苹果和雪梨
- 【jzoj5223】【GDOI2018模拟7.12】【B】【矩阵乘法】
- 【jzoj5224】【GDOI2018模拟7.12】【C】【自然数幂和】【杜教筛】
- JZOJ5220. 【GDOI2018模拟7.10】C(2017.8DP&贪心专题)
- [JZOJ5261]【GDOI2018模拟8.12】求和
- 【JZOJ5260】【GDOI2018模拟8.12】区间第k小
- 【jzoj5220】【GDOI2018模拟7.10】【C】【动态规划】
- 【jzoj5222】【GDOI2018模拟7.12】【A】【数据结构】