- 浏览: 390962 次
- 性别:
- 来自: 杭州
文章分类
最新评论
-
wsyzyrxp:
非常感谢 兄弟 帮了我大忙
[opengl]弹簧质点法模拟柔性布料以及椭球碰撞的opengl实现 -
mingdry0304:
[opengl]彩色立方体旋转 -
tyfengyu:
我刚刚更改的代码加上了标准差stdVal,故recoMat应该 ...
[python]用python实现的pca算法 -
tyfengyu:
python的pca代码有2处错误:1.finalData = ...
[python]用python实现的pca算法 -
暴风雪:
McFlurry 写道前排(凑字数)!擦你怎么摸来这里的
诈尸总结
大致题意:
给出下面一段代码
很明显这段代码是用a[n]数组来计算出b[n][n]。
void calculate(int a[N], int b[N][N]) { for (int i = 0; i < N; ++i) { for (int j = 0; j < N; ++j) { if (i == j) b[i][j] = 0; else if (i % 2 == 1 && j % 2 == 1) b[i][j] = a[i] | a[j]; else if (i % 2 == 0 && j % 2 == 0) b[i][j] = a[i] & a[j]; else b[i][j] = a[i] ^ a[j]; } } }
现在给出b[n][n]数组,求是否存在一个合法的a[n]数组,使其能计算出已经给出的b[][];
大致思路:
2-sat的思路很容易想到,就是考虑所有数字的31个位,对所有的位分为两组-----这个位是0,这个位是1,再按照上面的代码建立逻辑关系,再建图2-sat。
#include<iostream> #include<cstdio> #include <algorithm> #include<cstring> using namespace std; const int inf=1<<30; const int nMax=6000; const int mMax=1000010; class edge{ public: int v,nex; };edge e[mMax]; int k,head[nMax];//head[i]是以点i为起点的链表头部 void addedge(int a,int b){//向图中加边的算法,注意加上的是有向边//b为a的后续节点既是a---->b e[k].v=b; e[k].nex=head[a]; head[a]=k;k++; } int dfn[nMax],low[nMax],sta[nMax],top,atype,belon[nMax],dep; //atype 强连通分量的个数 bool insta[nMax]; void Tarjan(int u){ //我的Tarjan模版 int i,j; dfn[u]=low[u]=++dep; sta[++top]=u; insta[u]=1; for(i=head[u];i;i=e[i].nex){ int v=e[i].v; if(!dfn[v]){ Tarjan(v); low[u]=min(low[u],low[v]); } else{ if(insta[v])low[u]=min(low[u],dfn[v]); } } if(dfn[u]==low[u]){ atype++; //强连通分量个数 do{ j=sta[top--]; belon[j]=atype; //第j个点属于第type个连通块 insta[j]=0; }while(u!=j); } } void init(){ k=1; dep=1; top=atype=0; memset(insta,0,sizeof(insta)); //是否在栈中 memset(head,0,sizeof(head)); //静态链表头指针 memset(low,0,sizeof(low)); //Tarjan的low数组 memset(dfn,0,sizeof(dfn)); //Tarjan的dfn数组 memset(belon,0,sizeof(belon)); //记录每个点属于哪一个强连通分量 } int n,m; int mtx[600][600]; bool judge(){ for(int i=0;i<n;i++){ if(belon[i]==belon[i+n]){ return 0; } } return 1; } int main(){ int i,j,m,a1,a2,num; while(scanf("%d",&n)!=EOF) { for(i=0;i<n;i++) { for(j=0;j<n;j++) { scanf("%d",&mtx[i][j]); } } bool flag=1; for(i=0;i<n;i++) { for(j=0;j<n;j++) { if(mtx[i][j]!=mtx[j][i]) { flag=0; break; } if(i==j&&mtx[i][j]!=0) { flag=0; break; } } } if(!flag) { cout<<"NO\n"; continue; } flag=1; int left; for(left=0;left<31;left++) { num=n; init(); for(i=0;i<n;i++) { for(j=0;j<n;j++) { m=mtx[i][j]&(1<<left); if(i==j)continue; else if (i % 2 == 1 && j % 2 == 1) //// | { a1=i; a2=j; if(m!=0) { addedge(a1+num,a2); addedge(a2+num,a1); } else { addedge(a1,a1+num); addedge(a2,a2+num); } } else if (i % 2 == 0 && j % 2 == 0) //////& { a1=i; a2=j; if(m!=0) { addedge(a1+num,a1); addedge(a2+num,a2); } else { addedge(a1,a2+num); addedge(a2,a1+num); } } else ///// ^ { a1=i; a2=j; if(m!=0) { addedge(a1,a2+num); addedge(a2,a1+num); addedge(a1+num,a2); addedge(a2+num,a1); } else { addedge(a1,a2); addedge(a2,a1); addedge(a1+num,a2+num); addedge(a2+num,a1+num); } } } } for(i=0;i<num*2;i++) { if(!dfn[i])Tarjan(i); } n=num; if(!judge()) { flag=0; break; } } if(flag)printf("YES\n"); else printf("NO\n"); } return 0; }
发表评论
-
[kruskal]hdoj 4786
2014-10-29 20:38 706大致题意: 一个无向图中,每条边都是白边或 ... -
[prim]aizuoj:There is No Alternative
2014-10-20 01:02 889题目地址:http://judge.u-aizu.ac.j ... -
[最大流唯一性判断]hdoj 4888
2014-10-18 16:14 1366题意 给出一个矩阵n行每一行数字的和,m列每列数字的 ... -
[双连通分量+队列优化dijkstra]acdream 1415
2014-10-16 04:03 1148题意: 给出一个n个点,m条边无向图(2 ≤ ... -
[2-sat]hdoj 4751
2014-10-10 21:06 823大致题意 给出一个有向图,问这个图是否能分为两个完全图 ... -
[费用流]hdoj 5045
2014-09-28 00:11 877读题的时候漏掉了“题目是按照顺序出现的”,导致网络赛中这道题 ... -
[dfs+bfs]zoj 3811
2014-09-21 09:59 991题意: 在一个无向图中,能否按照一定的顺序访问图 ... -
[二分+最大流]zoj 3691:flower
2013-04-01 21:05 1685大致题意: 在一个三维空间中有n个点,每个点的坐标 ... -
[spfa]hdoj 4460:Friend Chains
2012-11-08 21:15 1701大致题意: 一个无向图n个点,m条边,求任意两个点之 ... -
[二分匹配]zoj 3156:Taxi
2012-10-25 19:28 1189大致题意: 有n个人和m辆车(n<=m)。给出所有 ... -
[Tarjan]uva 4846:Mines
2012-10-19 10:07 1327大致题意: 给出n个地雷,每颗地雷有一个爆炸范围,这 ... -
[二分匹配]zoj 3646:Matrix Transformer
2012-10-10 21:15 1070大致题意: 给出一个n*n的矩阵,每个矩阵元素的U或者 ... -
[拆点+网络流]2012 acm/icpc成都网络赛 hdoj 4292:Food
2012-09-16 17:15 2345大致题意: 有F种食物和D种饮料,每种食物或饮料只能 ... -
[网络流]2012 acm/icpc成都网络赛hdoj 4288:Control
2012-09-16 17:03 1363大致题意: 给出一个又n个点,m条边组成的无向图。给出两 ... -
[floyd+Tarjan]zoj 3232:It's not Floyd Algorithm
2012-09-09 09:49 1154大致题意: 给出一个有向图的传递闭包矩阵,求出这个图 ... -
[最大流]zoj 3642:Just Another Information Sharing Problem
2012-08-28 13:26 1150大致题意: 有n个人,每个人知道ai个消息,并且会 ... -
[Tarjan变形]zoj 3630:Information
2012-08-15 16:42 1162大致题意: 给出一个有向图,现在要删去一个点使得剩下的图 ... -
[Tarjan强连通分量]hdoj 3836:Equivalent Sets
2012-07-21 09:40 972大致题意: 就是给出一个有向图,求最少加多少条边可以 ... -
[最大流]zoj 3305:Get Sauce
2012-06-19 10:04 979大致题意: 有n种原材料,每种一件。现在给出m个组合 ... -
[最小费用流]zoj 3308:Move the Knights
2012-06-15 15:45 1037大致题意: 一个国际象棋棋盘上有n个马分布在不同的黑 ...
相关推荐
2. **进阶**: *Algorithm Design* 或者 *Concrete Mathematics* 3. **深入**: TAOCP 或者 *An Introduction to Probability Theory and Its Applications* 4. **实战**: 参加在线编程比赛如ACM-ICPC等,练习实际...
### 2. 洛谷 (Luogu) - **特点**:国内知名的在线编程学习平台之一,拥有庞大的题库。 - **适用对象**:初学者至高手级别的程序员。 - **优势**:社区活跃度高,用户间交流频繁,便于解决疑问。 ### 3. HDUOJ (Hdu...
- 大数运算(高精度加减乘除) - 二分查找 - 叉乘、判断线段相交 - BFS(广度优先搜索)、DFS(深度优先搜索) - 数学基础知识(辗转相除法、线段交点计算、多边形面积计算) 2. **高级算法训练**: - 匈牙利...
### ZOJ全部题目分类详解 #### 一、概述 ZOJ(Zhejiang Online Judge)作为一项在线编程竞赛平台,提供了丰富的算法题目供学习者练习。本文将根据所提供的文件中的“初学者题”、“模拟问题”、“动态规划”及...
#### 2.2 Zhejiang University ACM Online Judge (ZOJ) - **网址**: http://acm.zju.edu.cn - **特点**: - 由浙江大学维护,题目难度适中,适合练习ACM竞赛题目。 - 界面简洁,易于上手。 #### 2.3 Sichuan ...
**2. Java的局限性** - **优势**: Java作为一种面向对象的语言,在大型项目开发和安全性方面表现优异。 - **劣势**: 对于信息学竞赛而言,Java的输入输出操作相对繁琐,且执行效率远低于C/C++。由于比赛中对Java程序...
##### 2. 图论算法 - **图的基本概念**:掌握无向图、有向图、邻接矩阵、邻接表等基本概念。 - **最短路径算法**:包括Dijkstra算法、Bellman-Ford算法、Floyd算法等。 - **示例题目**: - POJ 1860: Dijkstra算法...
2. **组合数学** - **组合公式**:包括组合数的计算公式C(n, k),以及组合恒等式等。 - **排列组合生成**:实现生成所有可能的排列或组合,这对于全搜索和回溯算法非常重要。 这个模板库不仅提供了代码实现,还...
ZOJ,全称“浙江大学程序在线评测系统”(Zhejiang University Online Judge),是一个提供信息学(算法竞赛)题库及程序评测的网站。以下是关于ZOJ的详细介绍: 一、基本信息 名称:浙江大学程序在线评测系统(ZOJ)...
##### 2. C++ 泛型编程基础 - **概念**: 泛型编程是一种允许函数和类的参数化定义的技术,通过模板 (templates) 实现。 - **优点**: - 提高代码重用性。 - 增强类型安全性。 - 改进代码可读性和维护性。 - **C++ ...
- **数论算法**:如欧几里得算法(最大公约数)、扩展欧几里得算法(模逆运算)。 3. **ACM竞赛题型**: - **数学问题**:涉及组合数学、数论、几何等。 - **字符串处理**:模式匹配、编辑距离、最长公共前后缀...
2. **贪心算法(Greedy Algorithm)** - 贪心算法在每一步选择中都采取当前状态下最优的选择,从而希望导致结果全局最优。 - 应用场景:哈夫曼编码、最小生成树等问题。 3. **完全搜索(Complete Search)** - ...
### ZOJ 3464 Rugby Football 测试数据解析 #### 标题与描述解析 根据提供的标题和描述“ZOJ 3464 Rugby Football 测试数据”,我们可以了解到这是针对ZOJ(Zhejiang University Online Judge)平台上的一个编号为...
【标题】"ZOJ-CPP.zip" 是一个包含ZOJ(在线判题系统ZeroJudge)网站上多个C++编程练习解答的压缩包。这个压缩包的名称表明它专注于C++语言,很可能是一个学习资源,旨在帮助初学者理解和解决动态规划问题。 【描述...
leetcode中国 POJ problems ID Problem C++ 1001 1002 1003 1004 ...ZOJ 1002 8 POJ 1321 9 HDU 1241 (二)树 ID Problem C++ Source 1 LeetCode 100 2 LeetCode 101 3 LeetCode 437 4 LeetCode 235
1. **Strange Country II (ZOJ-3332) 竞赛图** - **题目描述**:在一种特殊的图——竞赛图中寻找哈密顿回路。 - **解题思路**:竞赛图中每个节点的入度和出度都为1,因此可以按照顺序构造哈密顿回路。 - **数据...
2. ZOJ Problem Set – 1037 Gridland 该题目主要考察了数组和矩阵的操作能力,要求解决 Gridland 问题。该问题的解决需要对数组和矩阵的操作有深入的理解。 知识点:数组、矩阵、数组操作、矩阵操作。 3. ZOJ ...