【题解】 P2151 [SDOI2009]HH去散步
生活随笔
收集整理的這篇文章主要介紹了
【题解】 P2151 [SDOI2009]HH去散步
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
\(Description:\)
給出一張圖,求\(A->B\),經過t的時間之后的方案數,答案對45989取模。
但不能\(a->b\),馬上,\(b->a\)
\(Sample\) \(Input\):
4 5 3 0 0
0 1
0 2
0 3
2 1
3 2
\(Sample\) \(Output:\)
4
\(Solution:\)
很明顯這題是矩乘,但不知道怎么管那個限制條件。
這又是套路題。。。
考慮邊是不會走反的,那么把邊變成矩陣的點,這樣就可以保障不會走反。
那么只有在兩條邊中一條邊的終點為另一條起點時才可以連
然后一開始要強制走到A,做t-1次冪。
再把強制走的矩陣乘上去,最后統計終點為B的邊的答案。
#pragma GCC optimize("inline") #include<cstdio> #include<iostream> #include<cstring> #define int long long #define one first #define two second using namespace std; int n,m,t,A,B,En,cnt,ans; const int N=120*2,p=45989; pair<int,int> E[N+5]; struct matrix {int n,m;int a[N+5][N+5];inline void clear() { n=m=0;memset(a,0,sizeof(a));}inline void set(int nx) { n=m=nx;for(int i=1;i<=nx;++i) a[i][i]=1;}inline void write() const{for(int i=1;i<=n;++i){for(int j=1;j<=m;++j) cout<<a[i][j]<<" ";cout<<endl;}putchar('\n');}inline matrix operator * (const matrix &nt) const {matrix tmp;tmp.clear();tmp.n=n;tmp.m=nt.m;for(int i=1;i<=n;++i) for(int j=1;j<=nt.m;++j) for(int k=1;k<=m;++k)tmp.a[i][j]=(tmp.a[i][j]+a[i][k]*nt.a[k][j]%p)%p;return tmp;}inline matrix operator *= (const matrix &nt) { return (*this)=(*this)*nt;} }a,b; inline matrix power(matrix x,int b){matrix ret;ret.clear();ret.set(x.n);while(b>0){if(b&1) ret=ret*x;x=x*x;b>>=1;}return ret; } signed main(){if(fopen("desire.in","r")){freopen("desire.in","r",stdin);freopen("desire.out","w",stdout);}ios::sync_with_stdio(0);cin>>n>>m>>t>>A>>B;for(int i=1;i<=m;++i){int u=0,v=0;cin>>u>>v;E[++En]=make_pair(u,v);E[++En]=make_pair(v,u);}a.n=1;a.m=En;b.n=En;b.m=En;for(int i=1;i<=En;++i) for(int j=1;j<=En;++j){if(((i&1) && i+1==j) || (!(i&1) && i-1==j) || i==j) continue;if(E[i].two==E[j].one) b.a[i][j]=1;}for(int i=1;i<=En;++i) if(E[i].one==A) a.a[1][i]=1;a=a*power(b,t-1);for(int i=1;i<=En;++i) if(E[i].two==B) ans=(ans+a.a[1][i])%p;cout<<ans<<endl;return 0; }轉載于:https://www.cnblogs.com/JCNL666/p/10687904.html
總結
以上是生活随笔為你收集整理的【题解】 P2151 [SDOI2009]HH去散步的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 运用CSS3媒体查询判断iPhoneX、
- 下一篇: Java多线程学习笔记一