Sicily 1211 商人的宣传

动态规划,建一个vector vec[i]用来储存i为起点,接下来一天内能走到的其他点,接下来累加就可以

// Problem#: 1211
// Submission#: 3257911
// The source code is licensed under Creative Commons Attribution-NonCommercial-ShareAlike 3.0 Unported License
// URI: http://creativecommons.org/licenses/by-nc-sa/3.0/
// All Copyright reserved by Informatic Lab of Sun Yat-sen University
#include<iostream>
#include<cstdio>
#include<vector>
using namespace std;
int road[101][101][101] = {};
int main() {
    int n, m, L;
    int q, A, B;
    int i, j, k, l;
    vector<int> v[101];
    
    scanf("%d%d%d", &n, &m, &L);
    while (m--) {
        scanf("%d%d", &i, &j);
        road[i][j][1] = 1;
        v[i].push_back(j);
    }
    
    for (l = 2; l <= L; l++) {
        for (i = 1; i <= n; i++) {
            for (j = 1; j <= n; j++) {
                if (road[i][j][l - 1] != 0) {
                    for (k = 0; k < v[j].size(); k++) {
                        road[i][v[j][k]][l] += road[i][j][l - 1];
                    }
                }
            }
        }
    }
    
    scanf("%d", &q);
    while (q--) {
        scanf("%d%d", &A, &B);
        printf("%d\n", road[A][B][L]);
    }
}                                 


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值