【矩阵相关】[Codeforces - 736D]Permutations
来源:互联网 发布:淘宝一键复制有坏处吗 编辑:程序博客网 时间:2024/06/14 01:14
题目大意
n个的排列,给你m条规则,规则是一个数对
对于每一条规则,如果我们删掉它,符合剩下的规则的排列数如果是奇数,就输出YES,否则输出NO。
分析
首先,我们可以把这些规则表示成邻接矩阵。
那本来的排列数就是邻接矩阵的积和式,但是我们无法快速计算积和式,但是我们只需要知道奇偶性。
考虑一下求积和式的式子。
求行列式的式子呢?
在模2意义下,
这两个式子是相同的呢,那我们考虑行列式就行了。
如果将矩阵中的一个元素
最终答案的奇偶性就是
显然,当
当
代码
#include<cstdio>#include<algorithm>#include<bitset>#define MAXM 500000using namespace std;template<class T>void Read(T &x){ char c; bool f(0); while(c=getchar(),c!=EOF) if(c=='-') f=1; else if(c=='?'){ x=-1; return; } else if(c>='0'&&c<='9'){ x=c-'0'; while(c=getchar(),c>='0'&&c<='9') x=x*10+c-'0'; ungetc(c,stdin); if(f) x=-x; return; }}bitset<2001>a[2001],inv[2001];int n,m;bool flag;typedef pair<int,int>pii;pii b[MAXM+10];void read(){ int u,v,i; Read(n),Read(m); for(i=1;i<=m;i++){ Read(u),Read(v); a[u][v]=1; b[i]=pii(v,u); } for(i=1;i<=n;i++) inv[i][i]=1;}void gaussian_jordan(){ int i,row,col; for(row=col=1;row<=n;row++,col++){ for(i=row;i<=n&&!a[i][col];i++); if(i>n){ flag=1; break; } if(i!=row) swap(a[i],a[row]),swap(inv[i],inv[row]); for(i=1;i<=n;i++) if(i!=row&&a[i][col]) a[i]^=a[row],inv[i]^=inv[row]; }}void solve(){ gaussian_jordan(); int i; for(i=1;i<=m;i++) if(flag||inv[b[i].first][b[i].second]) puts("NO"); else puts("YES");}int main(){ read(); solve();}
0 0
- 【矩阵相关】[Codeforces - 736D]Permutations
- [矩阵][高斯消元][二分图]Codeforces 736D.Permutations
- 【CODEFORCES】 D. Gargari and Permutations
- Codeforces 463D Gargari and Permutations(BFS)
- Codeforces 463D. Gargari and Permutations【DP】
- codeforces 463D Gargari and Permutations
- 【CodeForces】463D Gargari and Permutations DP
- Codeforces 463D Gargari and Permutations
- CodeForces 501D Misha and Permutations Summation
- Codeforces 501D Misha and Permutations Summation
- Codeforces 463D Gargari and Permutations(BFS)
- codeforces 888D.Almost Identity Permutations
- CodeForces 888D Almost Identity Permutations
- codeforces 463D D. Gargari and Permutations(dp)
- Permutations CodeForces
- Codeforces #264 (Div. 2) D. Gargari and Permutations
- Codeforces #264 (Div. 2) D. Gargari and Permutations
- Codeforces #264 div.2 D. Gargari and Permutations
- POJ1330 LCA/给树的节点标记层数
- C#字符转之UTF8转成Unicode
- 清除浮动的几种常用的方法
- 基于netty的心跳检测
- LeetCode 387. First Unique Character in a String
- 【矩阵相关】[Codeforces - 736D]Permutations
- APICLOUD平台初体验(一个任务系统的开发)
- linux下IO相关知识
- 报数(类似猴子选大王)
- POJ 2502 - Subway(单源最短路)
- 在不损失数据的情况下如何扩展C盘
- 剑指offer——面试题28:字符串的排列
- matlab—图像显示
- 使用libsvm实现文本分类