【Bzoj1875】HH去散步

先说一下边点互化的思路(貌似这种题不多?),以后看见边数少的要死的记得想边点乎化,将无向边变成有向边在考虑边之间的可达性,如果边x的终点是边y的起点(前提不是同一条边),则连一条x到y的边,表示从x可以走到y,同一条无向边转化成的两条有向边不联通(可以用最大流中异或1的方法记录两条有向边,当然也可以用一个数组记录,不过代码看起来稍恶心一点),这样就解决了题目中的限制。然后考虑如何求从a->b的长度为t的方案数,将边形成的矩阵乘t-1次,相当于经过了k-1个点,加上起点和终点k+1,中间正好经过k条边,然后有两个思路:

第一种:建立一个新矩阵,设立两个虚点(相当于原图中的虚边)使两个虚点分别与所有从出发点出发的边、所有到终点结束的边联通,用这个矩阵与刚才的矩阵相乘,统计两个虚点之间的方案数输出。
第二种:直接统计所有从出发点出发的边、所有到终点结束的边之间的方案数求和输出。

个人感觉后一种更方便一点,但是前一种也一定要会。

这题也有一个巨坑:

题目中说了有重边,所以再次理解一下题意:‘他不会立刻沿着刚刚走来的路走回’,但是他可以沿着刚刚走来的路的重边走回……

#include<iostream>
#include<cstring>
#include<cstdio>
#include<vector>
#define mod 45989
#define int LL
#define LL long long
using namespace std;
vector<int> ed[50];
int en[200],st[200];
int ni[200];
struct jz
{
LL m[200][200];
}cs;
int n,m,t,a,b;
jz operator * (jz a,jz b)
{
jz ans;memset(ans.m,0,sizeof(ans.m));
for(int i=1;i<=m*2;i++)
for(int j=1;j<=m*2;j++)
for(int k=1;k<=m*2;k++)
ans.m[i][j]=(ans.m[i][j]+a.m[i][k]*b.m[k][j])%mod;
return ans;
}
jz operator ^ (jz a,int b)
{
jz ans=a;b--;
while(b)
{
if(b&1)ans=ans*a;
a=a*a;
b=b>>1;
}
return ans;
}
signed main()
{
// freopen("in.txt","r",stdin); cin>>n>>m>>t>>a>>b;a++,b++;
int ta,tb;
for(int i=1;i<=m;i++)
{
cin>>ta>>tb;
ta++,tb++;
en[i]=tb;st[i]=ta;
en[i+m]=ta,st[i+m]=tb;
ni[i]=i+m,ni[i+m]=i;
ed[ta].push_back(i);
ed[tb].push_back(i+m);
}
for(int i=1;i<=m*2;i++)
{
for(int j=0;j<ed[en[i]].size();j++)
if(ni[i]!=ed[en[i]][j])
cs.m[i][ed[en[i]][j]]=1;
}
cs=cs^(t-1);
LL cnt=0;
for(int i=0;i<ed[a].size();i++)
for(int j=1;j<=m*2;j++)
if(en[j]==b)
cnt=(cnt+cs.m[ed[a][i]][j])%mod;
cout<<cnt%mod<<endl;
}

【Bzoj1875】HH去散步的更多相关文章

  1. BZOJ-1875 HH去散步 DP+矩阵乘法快速幂

    1875: [SDOI2009]HH去散步 Time Limit: 20 Sec Memory Limit: 64 MB Submit: 1196 Solved: 553 [Submit][Statu ...

  2. bzoj1875 HH去散步

    题目链接 一开始特别天真, $Folyd$传递闭包写了一下过了样例就交上去了 然后$gg$ $qwq$ 想了想$……$ 还要写一点东西 最后统计答案的时候有细节要注意 /*************** ...

  3. bzoj1875: [SDOI2009]HH去散步

    终于A了...早上按自己以前的写法一直WA.下午换了一种写法就A了qwq #include<cstdio> #include<cstring> #include<iost ...

  4. 【bzoj1875】【SDOI2009】【HH去散步】

    1875: [SDOI2009]HH去散步 Time Limit: 20 Sec Memory Limit: 64 MB Submit: 932 Solved: 424 [Submit][Status ...

  5. BZOJ 1875: [SDOI2009]HH去散步( dp + 矩阵快速幂 )

    把双向边拆成2条单向边, 用边来转移...然后矩阵乘法+快速幂优化 ------------------------------------------------------------------ ...

  6. BZOJ_1875_[SDOI2009]HH去散步_矩阵乘法

    BZOJ_1875_[SDOI2009]HH去散步_矩阵乘法 Description HH有个一成不变的习惯,喜欢饭后百步走.所谓百步走,就是散步,就是在一定的时间 内,走过一定的距离. 但 是同时H ...

  7. bzoj 1875: [SDOI2009]HH去散步 -- 矩阵乘法

    1875: [SDOI2009]HH去散步 Time Limit: 20 Sec  Memory Limit: 64 MB Description HH有个一成不变的习惯,喜欢饭后百步走.所谓百步走, ...

  8. BZOJ 1875 【SDOI2009】 HH去散步

    题目链接:HH去散步 如果不考虑不能走上一次走的边的话,这道题就是一个矩乘的裸题. 现在有了这个条件其实也很好做.我们平常的矩阵都是按点建的,\(A_{i,j}\)表示从第\(i\)个点走到第\(j\ ...

  9. 洛谷P2151 [SDOI2009] HH去散步 [矩阵加速]

    题目传送门 HH去散步 题目描述 HH有个一成不变的习惯,喜欢饭后百步走.所谓百步走,就是散步,就是在一定的时间 内,走过一定的距离. 但是同时HH又是个喜欢变化的人,所以他不会立刻沿着刚刚走来的路走 ...

随机推荐

  1. Pycharm如何在控制台输出窗口中使用Python解释器

    打开菜单栏run->edit configurations,把下图中的复选框选中就可以了.

  2. proteus 8.8 直装版提示Symbol $MKRORIGIN used but not found in libraries 安装后没有库

    用管理员运行程序,然后再通过菜单打开仿真文件是没问题. 解决方法:通常的安装目录是C:\Program Files (x86)\Labcenter Electronics\Proteus 8 Prof ...

  3. 关于springmvc 只能在index.jsp页面显示图片的处理办法jsp页面无法显示图片

    首先,已经配置好了mvc对静态资源的处理 只有index,jsp可以显示图片 其他页面同样的代码则不显示 后来折腾了半天,发现 index是static的父目录的级别文件 可以向下访问 但是其他的js ...

  4. 最短路径问题 HDU - 3790 (Dijkstra算法 + 双重权值)

    参考:https://www.cnblogs.com/qiufeihai/archive/2012/03/15/2398455.html 最短路径问题 Time Limit: 2000/1000 MS ...

  5. python进程间通信 queue pipe

    python进程间通信 1 python提供了多种进程通信的方式,主要Queue和Pipe这两种方式,Queue用于多个进程间实现通信,Pipe是两个进程的通信 1.1 Queue有两个方法: Put ...

  6. Spring MVC使用ModelAndView进行重定向(转)

    1.Servlet重定向forward与redirect: 使用servlet重定向有两种方式,一种是forward,另一种就是redirect.forward是服务器内部重定向,客户端并不知道服务器 ...

  7. 第二周<导学/分类>

    分类学习 分类算法各有不同 knn naivebyes regression dnn sklearn.linear_modlel 线性函数 sklearn.preprocessing 非线性函数 分类 ...

  8. IOS开发基础篇--CAShapeLayer的strokeStart和strokeEnd属性

    http://blog.csdn.net/yixiangboy/article/details/50662704 一.案例演示 最近有一个小需求,就是要做一个圆形进度条,大概样子如下: . 在不知道有 ...

  9. js的动态tab导航

    html部分 <div class="container"> <h3 class="page-header">tab切换</h3& ...

  10. SSH免密码登录的方法

    在你的自己的机器下面使用ssh-keygen命令来实现创建公钥 将你~/.ssh目录中的id_rsa.pub这个文件拷贝到你要登录的服务器的~/.ssh目录中,然 后再运行以下命令来将公钥导入到~/. ...