【矩陣】BZOJ 1875 || SDOI 2009 HH去散步
一眼就能看出的矩陣加速,但是需要進行轉換,主要在於題目中的不能馬上走剛剛通過的路,所以有特殊的處理,無向邊變有向邊,邊變點做矩陣加速。
#include<cstdio>
#include<algorithm>
#include<cmath>
#include<cstring>
#include<queue>
#define MAXN 400
const int mod = 45989;
using namespace std;
int N,M,T,A,B;
struct mat{
int n,m;
int t[MAXN +10][MAXN +10];
void init_min(){memset(t,0,sizeof(t));}
void init_max(){memset(t,0x3f,sizeof(t));}
void init_e()
{
memset(t,0,sizeof(t));
for(int i = 0;i < MAXN;i++)
t[i][i] = 1;
}
mat operator *(const mat &a)
{
mat c;
c.init_min();
c.n = n;
c.m = a.m;
for(int i = 0;i < n;i++)
for(int j = 0;j < a.n;j++)
for(int k = 0;k < a.m;k++)
c.t[i][k] = (c.t[i][k] + t[i][j] * a.t[j][k]) % mod;
return c;
}
};
mat map;
mat pow(mat a,int k)
{
mat ans;
ans.init_e();
ans.n = a.n;
ans.m = a.m;
while(k)
{
if(k&1)
ans = ans * a;
a = a * a;
k >>= 1;
}
return ans;
}
vector<pair<int,int> >Edges;
void pre()//邊連邊的初始化處理
{
int i,j;
for(i = 0; i < Edges.size(); i++)
for(j = 0; j < Edges.size(); j++)
if(Edges[i].second == Edges[j].first && (j ^ 1) != i)
map.t[i][j]++;
}
int main()
{
int i,j,k;
int u,v;
scanf("%d%d%d%d%d",&N,&M,&T,&A,&B);
for(i = 0;i < M;i++){
scanf("%d%d",&u,&v);
Edges.push_back(make_pair(u, v));
Edges.push_back(make_pair(v, u));
}
pre();
map.n = map.m = M * 2;
mat tt;
tt = pow(map,T - 1);
int ans = 0;
for(int i = 0; i < Edges.size(); i++) if(Edges[i].first == A)
for(int j = 0; j < Edges.size(); j++) if(Edges[j].second == B)
ans = (ans + tt.t[i][j]) % mod;
printf("%d\n",ans);
}
相關文章
- [SDOI2009] HH去散步
- bzoj4500: 矩陣(dfs)矩陣
- [BZOJ4818][Sdoi2017][容斥原理][矩陣優化DP]序列計數矩陣優化
- bzoj3240: [Noi2013]矩陣遊戲(矩陣乘法+快速冪)矩陣遊戲
- BZOJ 3240: [Noi2013]矩陣遊戲矩陣遊戲
- P1294 高手去散步
- BZOJ 3329 Xorequ:數位dp + 矩陣快速冪矩陣
- [SDOI2009] Bill的挑戰
- bzoj4547: Hdu5171 小奇的集合(矩陣乘法)矩陣
- BZOJ4910 : [Sdoi2017] 蘋果樹蘋果
- BZOJ4912 : [Sdoi2017]天才黑客黑客
- bzoj4887: [Tjoi2017]可樂(矩陣乘法+快速冪)矩陣
- 生成螺旋矩陣(方陣、矩陣)矩陣
- BZOJ4698: Sdoi2008 Sandy的卡片(字尾陣列 二分)陣列
- 鄰接矩陣、度矩陣矩陣
- 巨大的矩陣(矩陣加速)矩陣
- bzoj1084: [SCOI2005]最大子矩陣(Dp)矩陣
- 奇異矩陣,非奇異矩陣,偽逆矩陣矩陣
- P2167 [SDOI2009] Bill的挑戰
- BZOJ3329: Xorequ(二進位制數位dp 矩陣快速冪)矩陣
- 矩陣矩陣
- 去中心化矩陣公排互助系統開發方案中心化矩陣
- 資料結構:陣列,稀疏矩陣,矩陣的壓縮。應用:矩陣的轉置,矩陣相乘資料結構陣列矩陣
- 3D圖形:矩陣的行列式,矩陣的逆、正交矩陣、齊次矩陣3D矩陣
- 矩陣中最大的二維矩陣矩陣
- 求任意矩陣的伴隨矩陣矩陣
- BZOJ4598: [Sdoi2016]模式字串(點分治 hash)模式字串
- 機器學習中的矩陣向量求導(五) 矩陣對矩陣的求導機器學習矩陣求導
- 矩陣和陣列矩陣陣列
- 理解矩陣矩陣
- 矩陣相乘矩陣
- 矩陣分解矩陣
- 稀疏矩陣矩陣
- Numpy 矩陣矩陣
- 穿越矩陣矩陣
- 混淆矩陣矩陣
- 魔方矩陣矩陣
- 海浪矩陣矩陣