详细题解网上有好多。。

一开始想用一个并查集维护  确定关系

一个并查集维护相等关系

但会出现一些无解判不出来(原因未知)

所以就只能写加权并查集,记录每个点和他根节点的相等关系:0相等 1不等

然后原点选0还是1影响方块 1 0

已填的数影响方块 1 0

坐标影响 方块 1 0

统一一下就可以了

注:

1、分清变量!!!

2、分清变量!!!

3、分清变量!!!

AC 代码:

#include<iostream>
#include<cstdio>
using namespace std;
#define P 1000000000
int fu[2000005],g[2000005],ans,n,m,k,i,j,a[2000005],b[2000005],c[2000005];
bool sy[3];
int find(int o)
{if(fu[o]==o)return o;int t=find(fu[o]);g[o]^=g[fu[o]];return   fu[o]=t;
}
int calc()
{for(i=1;i<=n+m;i++)fu[i]=i,g[i]=0;fu[n+1]=1;for(i=1;i<=k;i++)   {int lx=find(a[i]),ly=find(b[i]);int lin=g[a[i]]^g[b[i]]^c[i];// cout<<endl<<a[i]<<" "<<b[i]-n<<" "<<c[i]<<endl;if(lx!=ly)fu[lx]=ly,g[lx]=lin;      else {if(lin)return 0;}}int daan=-1;for(i=1;i<=n+m;i++){if(i==find(i))if(daan==-1)daan=1;else{daan*=2;if(daan>=P)daan-=P;           }}return daan;
}
int main()
{scanf("%d%d%d",&n,&m,&k);sy[0]=sy[1]=1;for(i=1;i<=k;i++){scanf("%d%d%d",&a[i],&b[i],&c[i]);if(a[i]==1&&b[i]==1){sy[c[i]]=0,i--,k--;continue;}if((a[i]&1)==0&&(b[i]&1)==0)c[i]^=1;b[i]+=n;}if(sy[1])ans=calc();//cout<<ans<<" ";if(sy[0]){for(i=1;i<=k;i++){if (a[i]>1 && b[i]>n+1)       c[i]^=1;}ans+=calc();    }printf("%d",ans%P);
}

90分莫名wa代码:

#include<iostream>
#include<cstdio>
using namespace std;
#define P 1000000000
#define ll long long
int n,m,i,fu[2000006],fu2[2000006],cnt,a[2000006],b[2000006],c[2000006],k,j,bt[2000006];
bool cx[2000006];
ll ans;
ll ksm(ll a,ll b)
{ll ans=1;while(b){if(b%2)ans=(ans*a)%P;b/=2;a=(a*a)%P;        }    return ans;
}
int find(int o)
{if(fu[o]!=o)fu[o]=find(fu[o]);return fu[o];
}
int find2(int o)
{if(fu2[o]!=o)fu2[o]=find2(fu2[o]);return fu2[o];
}
int main()
{scanf("%d%d%d",&n,&m,&k);if(n==1||m==1){printf("0");return 0;}for(i=1;i<=n+m;i++)fu[i]=fu2[i]=i;//fu
fu2[1]=fu2[1+n];
fu[1]=fu[1+n];
int lin=-1;for(i=1;i<=k;i++){scanf("%d%d%d",&a[i],&b[i],&c[i]);if(lin==-1){if(a[i]==1&&b[i]==1)lin=c[i];}else if(a[i]==1&&b[i]==1){printf("0");return 0;}b[i]+=n;            }
//1,1为  0    if(lin!=1){for(i=1;i<=k;i++){    fu2[find2(a[i])]=fu2[find2(b[i])];if(a[i]==1||b[i]==n+1){if(c[i]==0){fu[find(a[i])]=fu[find(b[i])];}else{if(bt[a[i]]>0)    {fu[find(bt[a[i]])]=find(b[i]);}else bt[a[i]]=b[i];if(bt[b[i]]>0)    {fu[find(bt[b[i]])]=find(a[i]);}else bt[b[i]]=a[i];            }}elseif((a[i]&1)==0&&((b[i]-n)&1)==0)//^=1{if(c[i]==1){fu[find(a[i])]=fu[find(b[i])];}else{if(bt[a[i]]>0)    {fu[find(bt[a[i]])]=find(b[i]);}else bt[a[i]]=b[i];    if(bt[b[i]]>0)    {fu[find(bt[b[i]])]=find(a[i]);}else bt[b[i]]=a[i];            }}else{if(c[i]==0){fu[find(a[i])]=fu[find(b[i])];}else{if(bt[a[i]]>0)    {fu[find(bt[a[i]])]=find(b[i]);}else bt[a[i]]=b[i];if(bt[b[i]]>0)    {fu[find(bt[b[i]])]=find(a[i]);}else bt[b[i]]=a[i];                  }    }}bool ky=1;for(i=1;i<=n+m;i++){cx[i]=0;if(find(i)==find(bt[i])){ky=0;break;}}cnt=-1;for(i=1;i<=n+m;i++){if(cx[find2(i)]==0){cnt++;cx[find2(i)]=1;            }        }if(ky==1)ans=ksm(2,cnt);
}
//    cout<<cnt<<" "<<ans<<"  ";for(i=1;i<=n+m;i++)fu[i]=fu2[i]=i,bt[i]=0;fu2[1]=fu2[1+n];fu[1]=fu[n+1];//1,1为  1    if(lin!=0){for(i=1;i<=k;i++){                fu2[find2(a[i])]=fu2[find2(b[i])];if(a[i]==1||b[i]==n+1){if(c[i]==1){fu[find(a[i])]=fu[find(b[i])];}else{if(bt[a[i]]>0)    {fu[find(bt[a[i]])]=find(b[i]);}else bt[a[i]]=b[i];    if(bt[b[i]]>0)    {fu[find(bt[b[i]])]=find(a[i]);}else bt[b[i]]=a[i];            }}elseif((a[i]&1)==0&&((b[i]-n)&1)==0)//^=1{if(c[i]==0){fu[find(a[i])]=fu[find(b[i])];}else{if(bt[a[i]]>0)    {fu[find(bt[a[i]])]=find(b[i]);}else bt[a[i]]=b[i];if(bt[b[i]]>0)    {fu[find(bt[b[i]])]=find(a[i]);}else bt[b[i]]=a[i];                } }else{if(c[i]==1){fu[find(a[i])]=fu[find(b[i])];}else{if(bt[a[i]]>0)    {fu[find(bt[a[i]])]=find(b[i]);}else bt[a[i]]=b[i];if(bt[b[i]]>0)    {fu[find(bt[b[i]])]=find(a[i]);}else bt[b[i]]=a[i];                }    }}
bool    ky=1;for(i=1;i<=n+m;i++){cx[i]=0;if(find(i)==find(bt[i])){ky=0;break;}}cnt=-1;for(i=1;i<=n+m;i++){if(cx[find2(i)]==0){cnt++;cx[find2(i)]=1;            }        }if(ky==1)ans+=ksm(2,cnt),ans%=P;
}printf("%lld",ans);
}

2017.10.22 方格染色 失败总结相关推荐

  1. 2017.10.22 诸神眷顾的幻想乡 失败总结

    这个题有一个比较提示性的条件:叶子节点只有20个,点数总共是100000,那显然是要100000*20级别的效率 所以就考虑对叶子节点进行处理,首先要把树上的链拆成子串,所以就不会了.. 可以试图利用 ...

  2. 2017.10.22 最多的方案 失败总结

    老想着数表结合的方法,,结果就是找不到规律. 这个题看起来好像是一个函数就可以做,但其实不是的,斐波那契函数有很好的形势:f[i]=f[i-1]+f[i-2], 他可以看成两个点转移到一个点,也可以看 ...

  3. 2017.10.23 硬币购物 失败总结

    这题常规套路根本用不上 一共就四枚硬币,所以要考虑对硬币的算法 然而谁能想到容斥啊... 首先查询是很多的,需要对每个查询做到尽量常数级 首先排除dp查询,因为状态肯定不支持O(1)查询 然后需要想到 ...

  4. 2017.10.15 旅行comf 失败总结

    越是取值要求奇怪的题,范围不大的题,就越需要枚举. 这个比值的要求非常特殊,他没有任何最优值可以取,所以不能考虑dp及其相似算法 所以就要考虑枚举一个求另一个,易知枚举了最小的,加的必须是比他大的,所 ...

  5. 2017.10.12 礼物(zjoi2011) 失败总结

    听说n^4能过,于是愉快地敲了n^4  ,还带了两个最优性剪枝.. 结果事实证明是别人家的n^4...(wys?) 很奇怪玄学剪枝有时2^50次方都能过,为什么这个连1e10都过不了... TLE代码 ...

  6. 2017.10.11 Problem c 失败总结

    一开始就想偏了.. 首先计数题 30s + n<=300显然是让你n^3 dp的 先从手玩开始考虑 注意到从大到小出现的数字个数是可以判断有无解的 ,,然后可以画出一些区间的条件  如(> ...

  7. 2017.10.8 志愿者招募 失败总结

    .这个题要是想用费用流写的话就太难了. 所以就要考虑统筹学的另一个工具--单纯形 实际上.很多网络流解决的都是线性规划的问题,,这些问题很多都可以用单纯形解 关于单纯形的学习资料网上很详细了..这里就 ...

  8. 第10次Scrum会议(10/22)【欢迎来怼】

    一.小组信息 队名:欢迎来怼 小组成员 队长:田继平 成员:李圆圆,葛美义,王伟东,姜珊,邵朔,冉华 小组照片 二.开会信息 时间:2017/10/22 17:20~17:33,总计13min. 地点 ...

  9. Xamarin 2017.10.9更新

     Xamarin 2017.10.9更新 本次更新主要解决了一些bug.Visual Studio 2017升级到15.4获得新功能.Visual Studio 2015需要工具-选项-Xamarin ...

最新文章

  1. 如何正确对待vb脚本里的session
  2. php-mysql管理利器 adminer
  3. PS基础教程[3]如何去除照片上的水印
  4. Jenkins全新的UI体验-Blue Ocean
  5. b区计算机复试国家线,考研国家线/自主划线/a区b区线/专业线这些考研复试分数线你能分清吗?...
  6. linux usb mic延时大如何解决,Linux 中 SSH 客户端登录缓慢的解决办法
  7. 如何用PPT来实现三维3D效果,附参数设置详解
  8. Python——上下文管理器
  9. python进阶16多继承与Mixin
  10. android从本地服务器新浪云,GitHub - SinaCloudStorage/SinaStorage-SDK-Android: Android SDK For 新浪云存储...
  11. 阿里云云计算 44 云计算常见威胁
  12. Linux命令中CVf参数代表什么,Linux tar 命令使用参数详解
  13. ccf201503-1 ccf 图像旋转-内存限制问题
  14. 股票移动平均线matlab,移动平均线(MA)
  15. studio配置java环境,AndroidStudio安装及环境配置
  16. XTransfer技术专家康康:从普通程序员到架构师的进化之路
  17. 地方门户网站盈利的“达摩五指”
  18. ATFX:离岸人民币“破7”,开始还是结束?
  19. 全国大学生FPGA创新设计竞赛:FPGA—相位干涉仪测向算法
  20. SAP 物料账未分摊差异分析

热门文章

  1. linux l字符串,Linux shell 字符串常用操作
  2. Spark之StructuredStreaming
  3. CSNN: An Augmented Spiking based Framework with Perceptron-Inception
  4. loading窗口动画 web_在页面未加载完之前显示loading动画
  5. linux挂载硬盘_Linux中如何对硬盘进行分区、格式化、挂载使用
  6. python爬虫应用实例_Python爬虫进阶必备 | 一个典型的 AES 加密在爬虫中的应用案例...
  7. 多图技术贴:深入浅出解析大数据平台架构
  8. python with关键字_完全理解Python关键字with与上下文管理器
  9. hashmap put复杂度_集合类HashMap,HashTable,ConcurrentHashMap区别?
  10. python 双层for循环_day05-Python运维开发基础(双层循环、pass/break/continue、for循环)...