[noi2005]聰聰和可可
time limit:10000ms memory limit:65536k
total submit:21 accepted:14
description
input
資料的第1行為兩個整數n和e,以空格分隔,分別表示森林中的景點數和連線相鄰景點的路的條數。 第2行包含兩個整數c和m,以空格分隔,分別表示初始時聰聰和可可所在的景點的編號。 接下來e行,每行兩個整數,第i+2行的兩個整數ai和bi表示景點ai和景點bi之間有一條路。 所有的路都是無向的,即:如果能從a走到b,就可以從b走到a。 輸入保證任何兩個景點之間不會有多於一條路直接相連,且聰聰和可可之間必有路直接或間接的相連。
output
輸出1個實數,四捨五入保留三位小數,表示平均多少個時間單位後聰聰會把可可吃掉。
sample input
【輸入樣例1】sample output4 31 4
1 22 3
3 4【輸入樣例2】
9 99 3
1 22 3
3 44 5
3 64 6
4 77 8
8 9
【輸出樣例1】hint1.500
【輸出樣例2】
2.167
【樣例說明1】
開始時,聰聰和可可分別在景點1和景點4。
第乙個時刻,聰聰先走,她向更靠近可可(景點4)的景點走動,走到景點2,然後走到景點3;假定忽略走路所花時間。
可可後走,有兩種可能:
第一種是走到景點3,這樣聰聰和可可到達同乙個景點,可可被吃掉,步數為1,概率為 。
第二種是停在景點4,不被吃掉。概率為 。
到第二個時刻,聰聰向更靠近可可(景點4)的景點走動,只需要走一步即和可可在同一景點。因此這種情況下聰聰會在兩步吃掉可可。
所以平均的步數是1* +2* =1.5步。
對於所有的資料,1≤n,e≤1000。
對於50%的資料,1≤n≤50。
source
noi 2005
聰聰和可可
用n次spfa求出當聰聰在i位置,可可在j位置時,聰聰走的第一步。
同f[i][j]表示聰聰在i位置,可可在j位置時聰聰吃到可可的期望步數。
當聰聰在i位置,可可在j位置時,聰聰所走的路線是確定的(走距離可可最近的點(如果有多個走標號最小的))。而可可有deg[j] + 1個選擇(deg[j]表示j點的度),很明顯,聰聰能否吃到可可,與可可選擇的路線有關係(如果聰聰的下1步就是可可所在的位置或者聰聰下2步就是可可所在的位置聰聰只需要一次選擇就能吃到可可(聰聰先走))
如果聰聰與可可在同乙個位置,聰聰已經吃到可可了,期望為0.
那麼:f[i][j] =
1.i == j , 0;
2.path[i][j] == j || path[path[i][j]][j] == j , 1;
3.如果聰聰不能在一次選擇中吃到可可,那麼她吃到可可的期望就與可可所做的選擇有關了
f[i][j] = (f[path[path[i][j]]][j](可可還停留在在j位置) + ∑(f[path[path[i][j]][j]][v])(v表示與j相鄰的點) ) / (deg[j] + 1) + 1;(每個選擇的概率1 / (deg[j] + 1))
記憶化搜尋實現:
#include #include #include #include #include #include #include using namespace std;
const int maxn = 1000 + 10;
const double eps = 1e-8;
const int inf = 1000000000;
double f[maxn][maxn];
int path[maxn][maxn];
int deg[maxn];
int dis[maxn];
bool vis[maxn];
int n, m, st, en;
struct node
edge[maxn * maxn];
int head[maxn], e;
void add(int u, int v)
void init()
}}double dfs(int x, int y)
double sum = dfs(path[path[x][y]][y], y);
for (int i = head[y]; i != -1; i = edge[i].next)
return f[x][y] = sum / (deg[y] + 1.0) + 1.0;
}queue q;
void spfa(int u)
dis[u] = 0;
vis[u] = true;
q.push(u);
while (!q.empty())
else if (dis[v] == dis[cur] + 1)}}
}void input()
for (int i = 1; i <= n; i++) spfa(i);
printf("%.3lf\n", dfs(st, en));
}}int main()
題目鏈結 NOI2005 聰聰與可可
輸入檔案 cchkk.in輸出檔案 cchkk.out簡單對比 時間限制 1 s 記憶體限制 256 mb 問題描述 在乙個魔法森林裡,住著乙隻聰明的小貓聰聰和乙隻可愛的小老鼠可可。雖然灰姑娘非常喜歡她們倆,但是,聰聰終究是乙隻貓,而可可終究是乙隻老鼠,同樣不變的是,聰聰成天想著要吃掉可可。一天,聰...
NOI 2005 聰聰與可可
一張 n 個點,m 條邊的有向圖中,貓在 a 點,鼠在 b 點,每一秒兩者按照以下規則移動 當任意時刻貓到達鼠所在地時鼠被吃掉,求鼠被吃掉的期望時間。bzoj200題達成紀念 include include include include include include include includ...
NOI 2005 聰聰和可可(DP)
題目大意 給你個無向圖,貓在乙個點,老鼠在乙個點,貓一次走兩步,老鼠一次可以一步,也可以不走。貓每次會選擇離老鼠最近的並且編號最小的點走。老鼠有1 p 1 的概率停留在原地或走向相鄰的乙個點 p為當前點的度 求貓追老鼠的步數的數學期望。題目分析 真是個悲劇的題啊 最開始就想這個題沒法做啊 怎麼搞啊,...