結果
| 問題 | 
                            No.1340 おーじ君をさがせ
                             | 
                    
| コンテスト | |
| ユーザー | 
                             moririn2528_c
                         | 
                    
| 提出日時 | 2021-01-15 21:50:27 | 
| 言語 | C++14  (gcc 13.3.0 + boost 1.87.0)  | 
                    
| 結果 | 
                             
                                AC
                                 
                             
                            
                         | 
                    
| 実行時間 | 76 ms / 2,000 ms | 
| コード長 | 1,881 bytes | 
| コンパイル時間 | 1,003 ms | 
| コンパイル使用メモリ | 102,528 KB | 
| 実行使用メモリ | 5,248 KB | 
| 最終ジャッジ日時 | 2024-11-27 23:06:59 | 
| 合計ジャッジ時間 | 3,959 ms | 
| 
                            ジャッジサーバーID (参考情報)  | 
                        judge5 / judge1 | 
(要ログイン)
| ファイルパターン | 結果 | 
|---|---|
| sample | AC * 3 | 
| other | AC * 59 | 
ソースコード
#include<iostream>
#include<cstdio>
#include<cstring>
#include<string>
#include<vector>
#include<cmath>
#include<algorithm>
#include<map>
#include<queue>
#include<deque>
#include<iomanip>
#include<tuple>
#include<cassert>
#include<set>
#include<complex>
#include<numeric>
#include<functional>
using namespace std;
typedef long long int LL;
typedef pair<int,int> P;
typedef pair<LL,int> LP;
const int INF=1<<30;
const LL MAX=1e9+7;
void array_show(int *array,int array_n,char middle=' '){
    for(int i=0;i<array_n;i++)printf("%d%c",array[i],(i!=array_n-1?middle:'\n'));
}
void array_show(LL *array,int array_n,char middle=' '){
    for(int i=0;i<array_n;i++)printf("%lld%c",array[i],(i!=array_n-1?middle:'\n'));
}
void array_show(vector<int> &vec_s,int vec_n=-1,char middle=' '){
    if(vec_n==-1)vec_n=vec_s.size();
    for(int i=0;i<vec_n;i++)printf("%d%c",vec_s[i],(i!=vec_n-1?middle:'\n'));
}
void array_show(vector<LL> &vec_s,int vec_n=-1,char middle=' '){
    if(vec_n==-1)vec_n=vec_s.size();
    for(int i=0;i<vec_n;i++)printf("%lld%c",vec_s[i],(i!=vec_n-1?middle:'\n'));
}
LL n,m,p;
typedef vector<int> V;
typedef vector<vector<int>> V2;
V2 prod(V2& v1,V2& v2){
    V2 v3(n,vector<int>(n));
    int i,j,k;
    for(i=0;i<n;i++){
        for(k=0;k<n;k++){
            for(j=0;j<n;j++){
                v3[i][j]+=v1[i][k]*v2[k][j];
            }
        }
    }
    for(i=0;i<n;i++){
        for(j=0;j<n;j++){
            if(v3[i][j])v3[i][j]=1;
        }
    }
    return v3;
}
int main(){
    int i,j,k;
    int a,b,c;
    cin>>n>>m>>p;
    V2 v1(n,V(n)),v2(n,V(n));
    V2 vs(n,V(n));
    for(i=0;i<n;i++)vs[i][i]=1;
    for(i=0;i<m;i++){
        cin>>a>>b;
        v1[a][b]=1;
    }
    for(i=0;i<60;i++){
        if(p&1)vs=prod(vs,v1);
        v1=prod(v1,v1);
        p>>=1;
    }
    int s=0;
    for(i=0;i<n;i++){
        if(vs[0][i])s++;
    }
    cout<<s<<endl;
}
            
            
            
        
            
moririn2528_c