bzoj 5056: OI游戏
5056: OI游戏
Time Limit: 1 Sec Memory Limit: 64 MB
Submit: 204 Solved: 162
[Submit][Status][Discuss]
Description
Input
Output
Sample Input
2
01
10
Input2
4
0123
1012
2101
3210
Sample Output
1
Output2
6
HINT
Source
赤裸裸的矩阵树定理。
有向图的外向生成树个数=(入度矩阵-邻接矩阵)除去根的行和列之后的矩阵的行列式值。。。
而每次交换两行都要把答案乘上-1.
#include<bits/stdc++.h>
#define ll long long
const int ha=1000000007;
using namespace std;
char s[55][55];
int d[55],n,m;
int a[55][55];
bool v[55];
ll matrix[55][55],ans=1; inline void spfa(){
queue<int> q;
memset(d,0x3f,sizeof(d));
q.push(1),v[1]=1,d[1]=0; int x;
while(!q.empty()){
x=q.front(),q.pop(),v[x]=0;
for(int i=1;i<=n;i++) if(a[x][i]) if(d[x]+a[x][i]<d[i]){
d[i]=d[x]+a[x][i];
if(!v[i]) v[i]=1,q.push(i);
}
}
} inline void xy(){
for(int i=2;i<=n;i++){
int tmp=0;
for(int j=i;j<=n;j++) if(matrix[j][i]){
tmp=j;
break;
} if(!tmp) return;
if(tmp>i){
ans=ha-ans;
for(int j=i;j<=n;j++) swap(matrix[i][j],matrix[tmp][j]);
} for(int j=i+1;j<=n;j++) if(matrix[j][i]){
int A;
while(matrix[j][i]){
A=matrix[i][i]/matrix[j][i];
ans=ha-ans;
for(int k=i;k<=n;k++){
matrix[i][k]=((ll)matrix[i][k]-A*(ll)matrix[j][k])%ha;
if(matrix[i][k]<0) matrix[i][k]+=ha;
swap(matrix[j][k],matrix[i][k]);
}
}
}
}
} int main(){
cin>>n;
for(int i=1;i<=n;i++) scanf("%s",s[i]+1);
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++) a[i][j]=s[i][j]-'0'; spfa(); for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++) if(a[i][j]&&d[i]+a[i][j]==d[j]){
matrix[j][j]++;
matrix[i][j]--;
}
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++) if(matrix[i][j]<0) matrix[i][j]+=ha; xy(); for(int i=2;i<=n;i++) ans=ans*(ll)matrix[i][i]%ha; cout<<ans<<endl;
return 0;
}
bzoj 5056: OI游戏的更多相关文章
- bzoj 5056: OI游戏 最短路树的计数
OI游戏 Time Limit: 1 Sec Memory Limit: 64 MBSubmit: 196 Solved: 159[Submit][Status][Discuss] Descrip ...
- 【BZOJ5056】OI游戏 最短路+有向图生成树计数
[BZOJ5056]OI游戏 Description 小Van的CP最喜欢玩与OI有关的游戏啦~小Van为了讨好她,于是冥思苦想,终于创造了一个新游戏. 下面是小Van的OI游戏规则: 给定一个无向连 ...
- [BZOJ]1059 矩阵游戏(ZJOI2007)
虽然说是一道水题,但小C觉得还是挺有意思的,所以在这里mark一下. Description 小Q是一个非常聪明的孩子,除了国际象棋,他还很喜欢玩一个电脑益智游戏——矩阵游戏.矩阵游戏在一个N*N黑白 ...
- bzoj 3875 骑士游戏 - spfa - 动态规划
Description [故事背景] 长期的宅男生活中,JYY又挖掘出了一款RPG游戏.在这个游戏中JYY会 扮演一个英勇的骑士,用他手中的长剑去杀死入侵村庄的怪兽. [问题描述] 在这个游戏中,J ...
- BZOJ 1854: [Scoi2010]游戏 无向图判环
题目链接: 题目 1854: [Scoi2010]游戏 Time Limit: 5 Sec Memory Limit: 162 MB 问题描述 lxhgww最近迷上了一款游戏,在游戏里,他拥有很多的装 ...
- bzoj 1455: 罗马游戏 左偏树+并查集
1455: 罗马游戏 Time Limit: 5 Sec Memory Limit: 64 MBSubmit: 668 Solved: 247[Submit][Status] Descriptio ...
- [BZOJ 1025] [SCOI2009] 游戏 【DP】
题目链接:BZOJ - 1025 题目分析 显然的是,题目所要求的是所有置换的每个循环节长度最小公倍数的可能的种类数. 一个置换,可以看成是一个有向图,每个点的出度和入度都是1,这样整个图就是由若干个 ...
- BZOJ 1059 矩阵游戏
Description 小Q是一个非常聪明的孩子,除了国际象棋,他还很喜欢玩一个电脑益智游戏--矩阵游戏.矩阵游戏在一个\(N \times N\)黑白方阵进行(如同国际象棋一般,只是颜色是随意的). ...
- BZOJ 1025 [SCOI2009]游戏
1025: [SCOI2009]游戏 Time Limit: 1 Sec Memory Limit: 162 MBSubmit: 1533 Solved: 964[Submit][Status][ ...
随机推荐
- Understanding on 'Error to Origin (50x)' , 'Internal CDN Error (50x)' and 'External Error (50x)' in Chartron
Overview This document explains about definition of these values on OUI Chartron. Definition of Erro ...
- loj2061 「HAOI2016」放棋子
答案就是错排数 n = int(input()) f = [0] * 205 f[0] = 1 for i in range(2, n+1): f[i] = (i-1) * (f[i-1] + f[i ...
- Python+Selenium基础篇之3-打开和关闭IE/Chrome浏览器
前面文章介绍了,如何调用webdriver接口方法来打开和关闭Firefox浏览器,本文介绍如何打开IE和Chrome浏览器.web项目,需要做兼容性测试,最重要的是浏览器兼容性测试.如果只考虑win ...
- Python面向对象之什么是类(1)
1.C#.Java :只能用面向对象编程 Ruby.Python :函数编程+ 面向对象 面向对象编程不是在所有地方都比函数式编程方便的,类是为了封装,下面是简单的使用方法 在创建类的时候要用clas ...
- mybatis经验
- line-height与vertical-align
css世界读书笔记: 内联元素与流 块级元素负责结构,内联元素接管内容 x元素的下边缘就是我们的基线baseline x-height就是x的高度 vertical-align:middle是x中点位 ...
- css盒模型与bfc与布局与垂直水平居中与css设计模式等
一.css盒子与布局相关 盒子内部的布局 盒子之间的布局visual formatting 脱离正常流normal flow的盒子的布局 absolute布局上下文下的布局 float布局上下文下的布 ...
- 地理课(geography)
地理课(geography) 题目描述 地理课上,老师给出了一个巨大的地图,由于世界日新月异,会有一些道路在某一时刻被删除,也会有一些道路在某一时刻被修建.这里的道路均为双向的. 老师认为,有一些城市 ...
- Redis+sentinel 高可用实践
1.环境规划 10.213.50.138(主) redis+sentinel 10.213.50.168(从) redis+sentinel 10.213.50.227 作为客户端测试插入数 2.r ...
- MFC 禁用输入法
#include <Imm.h> HIMC m_hImc; // 全局或者成员变量 // Function for Disabling IME void CMyDialog::Disabl ...