SDOI2012 走迷宫】的更多相关文章

数据范围太大不能直接高斯消元, tarjan缩点然后按拓扑逆序对每个强连通分量高斯消元就可以了. E(u) = 1 + Σ E(v) / degree(u) 对拍时发现网上2个程序的INF判断和我不一样(他们2个的INF判断也不一样).....然而都A掉了....我觉得应该是他们写错了,我的做法应该没错的(正反2遍dfs,GDOI2015day1t1大冒险)(求打脸 -----------------------------------------------------------------…
2707: [SDOI2012]走迷宫 题意:求s走到t期望步数,\(n \le 10^4\),保证\(|SCC| \le 100\) 求scc缩点,每个scc高斯消元,scc之间直接DP 注意每次清空系数矩阵 #include <iostream> #include <cstdio> #include <cstring> #include <algorithm> #include <cmath> using namespace std; typ…
[BZOJ2707][SDOI2012]走迷宫 Description Morenan被困在了一个迷宫里.迷宫可以视为N个点M条边的有向图,其中Morenan处于起点S,迷宫的终点设为T.可惜的是,Morenan非常的脑小,他只会从一个点出发随机沿着一条从该点出发的有向边,到达另一个点.这样,Morenan走的步数可能很长,也可能是无限,更可能到不了终点.若到不了终点,则步数视为无穷大.但你必须想方设法求出Morenan所走步数的期望值. Input 第1行4个整数,N,M,S,T 第[2, M…
走迷宫 Morenan被困在了一个迷宫里.迷宫可以视为N个点M条边的有向图,其中Morenan处于起点S,迷宫的终点设为T.可惜的是,Morenan非常的脑小,他只会从一个点出发随机沿着一条从该点出发的有向边,到达另一个点.这样,Morenan走的步数可能很长,也可能是无限,更可能到不了终点.若到不了终点,则步数视为无穷大.但你必须想方设法求出Morenan所走步数的期望值. N<=10000,M<=1000000,保证强连通分量的大小不超过100 Clove_unique的题解 首先考虑图是…
Description Morenan被困在了一个迷宫里.迷宫可以视为N个点M条边的有向图,其中Morenan处于起点S,迷宫的终点设为T.可惜的是,Morenan非常的脑小,他只会从一个点出发随机沿着一条从该点出发的有向边,到达另一个点.这样,Morenan走的步数可能很长,也可能是无限,更可能到不了终点.若到不了终点,则步数视为无穷大.但你必须想方设法求出Morenan所走步数的期望值. Input 第1行4个整数,N,M,S,T 第[2, M+1]行每行两个整数o1, o2,表示有一条从o…
题目 Morenan被困在了一个迷宫里.迷宫可以视为N个点M条边的有向图,其中Morenan处于起点S,迷宫的终点设为T.可惜的是,Morenan非常的脑小,他只会从一个点出发随机沿着一条从该点出发的有向边,到达另一个点.这样,Morenan走的步数可能很长,也可能是无限,更可能到不了终点.若到不了终点,则步数视为无穷大.但你必须想方设法求出Morenan所走步数的期望值. 输入格式 第1行4个整数,N,M,S,T 第[2, M+1]行每行两个整数o1, o2,表示有一条从o1到o2的边. 输出…
题面 Morenan被困在了一个迷宫里.迷宫可以视为N个点M条边的有向图,其中Morenan处于起点S,迷宫的终点设为T.可惜的是,Morenan非常的脑小,他只会从一个点出发随机沿着一条从该点出发的有向边,到达另一个点.这样,Morenan走的步数可能很长,也可能是无限,更可能到不了终点.若到不了终点,则步数视为无穷大.但你必须想方设法求出Morenan所走步数的期望值. N<=10000,M<=1000000,保证强连通分量的大小不超过 200. 题解 做法没什么好细说的, 就是缩点,然后…
题意:给你一个有向图,点数10000,边数1000000,SCC大小不超过100(按数据范围的写法只有第三部分数据满足这个条件,不过第二部分数据并没有出现大小大于100个点的SCC,我是用数组大小为100的代码以身试法的2333)从s出发随机走,问走到t的期望步数. 首先考虑inf的情况.如果从s出发可以走到一个无法走到t的点,比如这个数据:红色点为起点,绿色点为终点,那么有1/2的概率永远也走不到(在蓝色点停下). 注意出现环的情况不一定是INF,因为在环上走无穷步的概率可能是无穷小.于是先缩…
题目链接 一个点到达终点的期望步数 \(E_i=\sum_{(i,j)\in G}\frac{E_j+1}{out[i]}\),\(out[i]\)为点\(i\)的出度. 那么对于一个DAG可以直接在反向图上拓扑+DP求解. 于是对于环内高斯消元,缩点后拓扑+DP. 无解(无限步)的情况: 起点到不了终点:起点能够走到一个环,且在这个环内无法走到终点(走不出去). ps:1.T连出的边不能计算. 2.期望的计算式有个+1! 3.建反向边! 4.重边 注: 如果\(E_i\)表示从起点到点\(i\…
题意 题目链接 Sol 设\(f[i]\)表示从\(i\)走到\(T\)的期望步数 显然有\(f[x] = \sum_{y} \frac{f[y]}{deg[x]} + 1\) 证明可以用全期望公式. 那么我们可以把每个强联通分量里的点一起高斯消元,就做完了. (warning:BZOJ没有C++11,但是下面的代码是正确的,至于为什么可以点题目链接....) #include<bits/stdc++.h> using namespace std; const int MAXN = 1e6 +…
http://www.lydsy.com/JudgeOnline/problem.php?id=2707 dp[i] 表示从点i到终点的期望步数 dp[i]= Σ (dp[j]+1)/out[i] j表示i的出边指向的店,out[i] 表示i的出边数 如果图是一张DAG,那么直接在反图 上 拓扑排序DP即可 现在有环,那就缩点,环上的用高斯消元 无解的情况: 1.起点走不到终点 2.存在一个联通块,起点能走到他,但这个联通块没有出边,且不是终点所在的联通块 因为此时一旦步入这个联通块将永远走不出…
题目描述 传送门 分析 首先判掉 \(INF\) 的情况 第一种情况就是不能从 \(s\) 走到 \(t\) 第二种情况就是从 \(s\) 出发走到了出度为 \(0\) 的点,这样就再也走不到 \(t\) 然后我们去考虑 \(60\) 分的做法 我们设 \(dp[u]\) 为当前在点 \(u\) 走到点 \(t\) 的期望步数 那么就有 \(dp[u]=\sum_{u->v}^v((dp[v]+1) \times \frac{1}{rd[u]})\) 移项之后就变成了 \(dp[u]-\sum_…
题面传送门 之所以写个题解是因为题解区大部分题解的做法都有 bug(u1s1 周六上午在讨论区里连发两个 hack 的是我,由于我被禁言才让 ycx 代发的) 首先碰到这种期望题,我们套路地设 \(dp_u\) 为从节点 \(u\) 走到节点 \(n\) 经过的节点数的期望值,那么显然有转移方程 \(dp_u=\dfrac{1}{deg_u}(\sum\limits_{(u,v)\in E}dp_v)+1\),由于这个 \(dp\) 方程存在环,故需按照 P3232 游走 的套路进行高斯消元,具…
首先求出SCC缩点,E[T]=0,按拓扑序计算 对于无边连出的块,如果不是T所在块,则称该块是死路块 对于一个块,如果其中的点连出的边是死路块,则它也是死路块 否则对于每块进行高斯消元求出期望 如果S点所在块为死路块,则答案为INF #include<cstdio> #include<cmath> const int N=10010,M=1000010; int n,m,x,y,i,j,S,T; int g[3][N],nxt[3][M],v[3][M],ed,G[N],NXT[N…
先Tarjan缩点 强连通分量里用高斯消元外面直接转移 注意删掉终点出边和拓扑 #include<cstdio> #include<cstring> #include<algorithm> #include<iostream> #include<queue> #include<vector> #define N 10010 #define M 1000010 using namespace std; typedef double D;…
曾经用C语言做过的动态走迷宫程序,先分享代码如下: 代码如下: //头文件 #include<stdio.h> #include<windows.h>//Sleep(500)函数调用此头文件 #include<conio.h>//getch()函数调用此头文件 #include<stdlib.h>//system("cls")函数调用此头文件 //函数状态码定义 /******************************/ #defi…
走迷宫 Time Limit: 1000ms   Memory limit: 65536K  有疑问?点这里^_ 题目描述 一个由n * m 个格子组成的迷宫,起点是(1, 1), 终点是(n, m),每次可以向上下左右四个方向任意走一步,并且有些格子是不能走动,求从起点到终点经过每个格子至多一次的走法数. 输入        第一行一个整数T 表示有T 组测试数据.(T <= 110) 对于每组测试数据: 第一行两个整数n, m,表示迷宫有n * m 个格子.(1 <= n, m <=…
洛谷1238 走迷宫 题目描述 有一个m*n格的迷宫(表示有m行.n列),其中有可走的也有不可走的,如果用1表示可以走,0表示不可以走,文件读入这m*n个数据和起始点.结束点(起始点和结束点都是用两个数据来描述的,分别表示这个点的行号和列号).现在要你编程找出所有可行的道路,要求所走的路中没有重复的点,走时只能是上下左右四个方向.如果一条路都不可行,则输出相应信息(用-l表示无路). 输入输出格式 输入格式: 第一行是两个数m,n(1<m,n<15),接下来是m行n列由1和0组成的数据,最后两…
题目描写叙述 http://acm.nyist.net/JudgeOnline/problem.php?pid=306 Dr.Kong设计的机器人卡多非常爱玩.它经常偷偷跑出实验室,在某个游乐场玩之不疲. 这天卡多又跑出来了.在SJTL游乐场玩个不停,坐完碰碰车.又玩滑滑梯.这时卡多又走入一个迷宫.整个迷宫是用一个N * N的方阵给出,方阵中单元格中填充了一个整数,表示走到这个位置的难度. 这个迷宫能够向上走,向下走,向右走,向左走,可是不能穿越对角线. 走迷宫的取胜规则非常有意思,看谁能更快地…
Problem A: 走迷宫问题Time Limit: 1 Sec Memory Limit: 128 MBSubmit: 9 Solved: 3[Submit][Status][Web Board]Description给定一个二维数组 int map[5][5] = {0 , 1 , 0 , 0 , 0 ,0 , 1 , 0 , 1 , 0 ,0 , 0 , 0 , 0 , 0 ,0 , 1 , 1 , 1 , 0 ,0 , 0 , 0 , 1 , 0 ,} ; Input输入两个正整数m,…