天天看點

Hdu4405 Aeroplane chess 數論

#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<iostream>
#include<cmath>
#include<algorithm>
#include<queue>
#include<map>
#include<set>
#include<vector>

using namespace std;

#define REP(i, a, b) for(int i = (a), _end_ = (b);i <= _end_; ++ i)

const int maxn = ;
const int INF = ;

int n, m;

double f[maxn];
int Map[maxn];

int main() {
    int x, y;
    while(scanf("%d%d", &n, &m) != EOF) {
        if((m + n) == )
            break;
        REP(i, , maxn)
            Map[i] = INF;
        REP(i, , m) {
            scanf("%d%d", &x, &y);  
            Map[x] = y; 
        }
        memset((f), , sizeof(f));
        for(int i = n - ;i >= ; -- i)     
            if(Map[i] == INF) {
                REP(j, , )
                    f[i] += f[i + j] / ;
                f[i] += ;
            }
            else
                f[i] = f[Map[i]];       
        printf("%.4lf\n", f[]);
    }
    return ;
}