传送门

这个题一开始他们说什么列异或方程组我也不懂……根据学姐告诉我的结论,如果联通块内有一棵树的话,那么其他的非树边反转或者不反转都行,反正树是能给你还原回去的。不过如果有奇数个黑点是不行的。
根据这个结论,记录联通块个数为tot,那么不删点的时候答案就是\(2^{m-n+tot}\)
然后对于删点……和yyb大神学的……如果这个点是割点,那么首先我们看它所连接的联通块中有没有有奇数个黑点的,如果有就不行。
之后再看它上面的联通块中是否有奇数个黑点,有就不行。
如果这个联通块外也有奇数个黑点……还是不行……
否则的话答案就是在原来的基础上,减去点度,加上1,再加上获得的新联通块个数,原理和上面是一样的。
注意如果是根的话获得的新联通块个数要-1,因为上面没了。

#include<bits/stdc++.h>
#define rep(i,a,n) for(int i = a;i <= n;i++)
#define per(i,n,a) for(int i = n;i >= a;i--)
#define enter putchar('\n')
#define pr pair<int,int>
#define mp make_pair
#define fi first
#define sc second
using namespace std;
typedef long long ll;
const int M = 100005;
const int mod = 1e9+7;int read()
{int ans = 0,op = 1;char ch = getchar();while(ch < '0' || ch > '9') {if(ch == '-') op = -1;ch = getchar();}while(ch >='0' && ch <= '9') ans = ans * 10 + ch - '0',ch = getchar();return ans * op;
}struct edge
{int next,to,from;
}e[M<<1];int n,m,head[M],ecnt,dfn[M],low[M],vis[M],idx,root,T;
int sum[M],c[M],d[M],f[M],deg[M],po[M<<1],a[M],val,tot,x,y;
char s[M];
void add(int x,int y){e[++ecnt] = {head[x],y,x},head[x] = ecnt,deg[y]++;}
void clear()
{ecnt = idx = val = tot = 0;rep(i,1,n) head[i] = dfn[i] = low[i] = deg[i] = d[i] = c[i] = f[i] = 0;
}void tarjan(int x)
{dfn[x] = low[x] = ++idx,vis[x] = root,sum[x] = a[x];for(int i = head[x];i;i = e[i].next){int t = e[i].to;if(!dfn[t]){tarjan(t),sum[x] += sum[t];low[x] = min(low[x],low[t]);if(low[t] >= dfn[x]) d[x] |= (sum[t] & 1),c[x]++,f[x] += sum[t];}else low[x] = min(low[x],dfn[t]);}if(x == root) c[x]--;
}int main()
{po[0] = 1;rep(i,1,(M<<1)-1) po[i] = (po[i-1] << 1) % mod;T = read();while(T--){n = read(),m = read(),clear();rep(i,1,m) x = read(),y = read(),add(x,y),add(y,x);scanf("%s",s+1);rep(i,1,n) a[i] = s[i] - '0';rep(i,1,n) if(!dfn[i]) root = i,tarjan(i),tot++,val += sum[i] & 1;val ? printf("0 ") : printf("%d ",po[m-n+tot]);rep(i,1,n){if(d[i]) printf("0 ");else if(val - (sum[vis[i]] & 1)) printf("0 ");else if((sum[vis[i]] - a[i] - f[i]) & 1) printf("0 ");else printf("%d ",po[m-n+tot-deg[i]+1+c[i]]);}enter;}return 0;
}

转载于:https://www.cnblogs.com/captain1/p/10603888.html

HAOI2018 反色游戏相关推荐

  1. 【loj#2524】【bzoj5303】 [Haoi2018]反色游戏(圆方树)

    题目传送门:loj bzoj 题意中的游戏方案可以转化为一个异或方程组的解,将边作为变量,点作为方程,因此若方程有解,方程的解的方案数就是2的自由元个数次方.我们观察一下方程,就可以发现自由元数量=边 ...

  2. [BZOJ5303] [HAOI2018] 反色游戏

    题目链接 LOJ:https://loj.ac/problem/2524 BZOJ:https://lydsy.com/JudgeOnline/problem.php?id=5303 洛谷:https ...

  3. P4494-[HAOI2018]反色游戏【圆方树】

    正题 题目链接:https://www.luogu.com.cn/problem/P4494 题目大意 给出nnn个点mmm条边的一张无向图,节点有0/10/10/1,每条边可以选择是否取反两边的点. ...

  4. C语言实现将彩色bmp图像转化为灰图、灰度图像反色

    彩色图像转灰度图像 彩色(24位)bmp图像结构: typedef struct{bitmapFileHeader bfHeader;bitmapInfoHeader biHeader;unsigne ...

  5. LUT 查表反色处理

    cv::Mat inverseColor6(cv::Mat srcImage) {int row = srcImage.rows;int col = srcImage.cols;cv::Mat tem ...

  6. 图像补运算:MatIterator_迭代器反色处理

    #include <opencv2/opencv.hpp> #include <opencv2/video/background_segm.hpp>// 注意srcImage为 ...

  7. 图像补运算:反色处理

    cv::Mat inverseColor1(cv::Mat srcImage) {cv::Mat tempImage = srcImage.clone();int row = tempImage.ro ...

  8. 图像遍历反色处理,遍历多通道图片

    #include <opencv2/core/core.hpp> #include <opencv2/highgui/highgui.hpp> #include <ios ...

  9. 嵌入式 hi3518a平台多编码通道同时绑定OSD实现以及反色实现

    1.首先海思官方给予的代码中找到编码通道组是不变的,变化的是DevId可以参考的代码是: { /**************************************************** ...

  10. edge chrome 浏览器 底色调黑 反色

    edge chrome 浏览器 底色调黑 反色 编程的生活,眼睛实在受不了屏幕太亮 edge 地址栏:edge://flags 搜索:dark 选择:Enabled 重启 chrome 地址栏:chr ...

最新文章

  1. 2021全球数字经济大会“北京数字经济体验周”清华数为大数据开发工具DWF体验培训工作圆满结束...
  2. php haystack,haystack(示例代码)
  3. python什么时候用eval_Python:eval的妙用和滥用
  4. windows下客户端连接上马上会断开连接_Fix SSH客户端登录会话超时设置
  5. [na]锐起无盘机并发部署多台windows
  6. MAC常用快捷键和命令
  7. VB.net WinForm如何写一个分线程进度条
  8. 面向 Java 开发人员的 db4o 指南: 简介和概览
  9. VMware中不能使用ifconfig教程——亲测有效
  10. CFA 2020 notes的PDF版本,热乎乎的百度网盘分享
  11. 单片机控制两个步进电机画圆_单片机控制的步进电机程序框图
  12. 易语言-王者天下页游自动回收辅助
  13. Python挑战游戏( PythonChallenge)闯关之路Level- 4
  14. 机械图样解读——尺寸线及尺寸界线,尺寸标注
  15. windterm复制长命令,换行只显示最后一行需修改配置
  16. 铁路办公施工信息化管理系统软件平台
  17. binutils工具集
  18. linux 图形库编程资源
  19. 大数据对我国商业模式创新的“三维”驱动研究
  20. 无需NAS,让你躺在床上用ipad也能够直接观看电脑上的视频(安卓手机也可的简易方法)

热门文章

  1. java. base关键字_C#基础知识之base关键字介绍
  2. 项目组织结构以及模块规划
  3. python中的math.floor可以用于整数吗_为什么Python的math.ceil()和math.floor()操作返回浮点数而不是整数?...
  4. 力扣题目系列:860. 柠檬水找零
  5. Java教程_软件开发基础
  6. pgAgent couldn't get a connection to the database!
  7. 柯洁放言力拼AlphaGo:我抱有必死的信念!(全部细节都在这里)
  8. 在.NET项目中使用PostSharp,使用MemoryCache实现缓存的处理
  9. c++实现双向链表的常用功能
  10. 安装Python readline模块