Advertisement
leanchec

Untitled

Sep 24th, 2023
100
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.38 KB | None | 0 0
  1. #include<bits/stdc++.h>
  2. using namespace std;
  3.  
  4. typedef long long ll;
  5.  
  6. const ll modulo=1e9+7;
  7.  
  8. vector<vector<ll>> mult(vector<vector<ll>> a, vector<vector<ll>> b){
  9.     vector<vector<ll>> resp(a.size());
  10.  
  11.     for(int i=0; i<a.size(); i++){
  12.         for(int j=0; j<b[0].size(); j++){
  13.             ll num=0;
  14.  
  15.             for(int k=0; k<b.size(); k++){
  16.                 ll qtd=(a[i][k]*b[k][j])%modulo;
  17.                 num=(num+qtd)%modulo;
  18.             }
  19.  
  20.             resp[i].push_back(num);
  21.         }
  22.     }
  23.  
  24.     return resp;
  25. }
  26.  
  27. int main(){
  28.     ios_base::sync_with_stdio(0); cin.tie(0);
  29.     int n, m, q;
  30.     vector<vector<ll>> graph[32], base;
  31.     cin >> n >> m >> q;
  32.     graph[0].resize(n);
  33.     base.resize(n);
  34.  
  35.     for(int i=0; i<n; i++){
  36.         graph[0][i].resize(n);
  37.         base[i].resize(n);
  38.         base[i][i]=1;
  39.     }
  40.  
  41.     for(int i=0; i<m; i++){
  42.         int u, v;
  43.         cin >> u >> v;
  44.         u--;
  45.         v--;
  46.         graph[0][u][v]=1;
  47.     }
  48.  
  49.     for(int i=1; i<=29; i++){
  50.         graph[i]=mult(graph[i-1], graph[i-1]);
  51.     }
  52.  
  53.     while(q--){
  54.        int u, v, k;
  55.        cin >> u >> v >> k;
  56.        u--;
  57.        v--;
  58.        vector<vector<ll>> paths=base;
  59.  
  60.        for(int i=0; k>=(1<<i); i++){
  61.             if(k&(1<<i)){
  62.                 paths=mult(paths, graph[i]);
  63.             }
  64.        }
  65.  
  66.        cout << paths[u][v] << '\n';
  67.     }
  68.  
  69.     return 0;
  70. }
  71.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement