結果
問題 | No.1340 おーじ君をさがせ |
ユーザー |
|
提出日時 | 2021-08-15 19:34:44 |
言語 | C++17 (gcc 13.3.0 + boost 1.87.0) |
結果 |
AC
|
実行時間 | 1,347 ms / 2,000 ms |
コード長 | 4,217 bytes |
コンパイル時間 | 4,603 ms |
コンパイル使用メモリ | 254,076 KB |
最終ジャッジ日時 | 2025-01-23 22:30:40 |
ジャッジサーバーID (参考情報) |
judge4 / judge1 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 3 |
other | AC * 59 |
ソースコード
//GIVE ME AC!!!!!!!!!!!!!!!!!//#pragma GCC target("avx")//#pragma GCC optimize("O3")//#pragma GCC optimize("unroll-loops")#include<bits/stdc++.h>#define ll long long#define ld long double#define floatset() fixed<<setprecision(15)#define all(n) n.begin(),n.end()#define rall(n) n.rbegin(),n.rend()#define rep(i, s, n) for (ll i = s; i < (ll)(n); i++)#define pb push_back#define eb emplace_back#define max_(a) *max_element(all(a))#define min_(a) *min_element(all(a))#define INT(...) int __VA_ARGS__;scan(__VA_ARGS__)#define LL(...) ll __VA_ARGS__;scan(__VA_ARGS__)#define STR(...) string __VA_ARGS__;scan(__VA_ARGS__)#define CHR(...) char __VA_ARGS__;scan(__VA_ARGS__)#define DBL(...) double __VA_ARGS__;scan(__VA_ARGS__)#define LD(...) ld __VA_ARGS__;scan(__VA_ARGS__)using namespace std;using vl=vector<ll>;using vi=vector<int>;using vs=vector<string>;using vc=vector<char>;using vvl=vector<vl>;using P=pair<ll,ll>;using vvc=vector<vc>;using vd=vector<double>;using vp=vector<P>;using vb=vector<bool>;const int dx[8]={1,0,-1,0,1,-1,-1,1};const int dy[8]={0,1,0,-1,1,1,-1,-1};const ll inf=2e18;ll MOD=1000000007;const ll mod=998244353;const double pi=acos(-1);template<typename T1,typename T2 >ostream &operator<<(ostream&os,const pair<T1,T2>&p) {os<<p.first<<" "<<p.second;return os;}template<typename T1,typename T2>istream &operator>>(istream&is,pair<T1,T2>&p) {is>>p.first>>p.second;return is;}template<typename T>ostream &operator<<(ostream&os,const vector<T>&v) {for(int i=0;i<(int)v.size();i++) {os<<v[i]<<(i+1!=v.size()?" ":"");}return os;}template<typename T>istream &operator>>(istream&is,vector<T>&v) {for(T &in:v)is>>in;return is;}void scan(){}template<class Head,class... Tail>void scan(Head&head,Tail&... tail) {cin>>head;scan(tail...);}template<class T>void print(const T &t) { cout << t << '\n'; }template<class Head, class... Tail>void print(const Head &head, const Tail &... tail) {cout << head << ' ';print(tail...);}template<class... T>void fin(const T &... a) {print(a...);exit(0);}template<typename T>ll sum_(vector<T>&v){ll res=0;for(auto &e:v)res+=e;return res;}template<typename T1,typename T2>inline bool chmax(T1&a,T2 b){return a<b&&(a=b,true);}template<typename T1,typename T2>inline bool chmin(T1&a,T2 b){return a>b&&(a=b,true);}#if __has_include(<atcoder/all>)#include <atcoder/all>using mint = atcoder::modint1000000007;#endiftemplate< class T >struct Matrix {vector<vector<T>>A;Matrix() {}Matrix(size_t n,size_t m):A(n,vector<T>(m,0)){}Matrix(size_t n):A(n,vector<T>(n,0)){};size_t height(){return (A.size());}size_t width(){return (A[0].size());}inline const vector<T>&operator[](int k)const{return (A.at(k));}inline vector<T>&operator[](int k){return (A.at(k));}static Matrix E(size_t n){Matrix mat(n);for(int i=0;i<n;i++)mat[i][i]=1;return (mat);}Matrix &operator+=(Matrix&B){size_t n=height(),m=width();for(int i=0;i<n;i++)for(int j=0;j<m;j++)(*this)[i][j]+=B[i][j];return (*this);}Matrix &operator-=(Matrix&B){size_t n=height(),m=width();for(int i=0;i<n;i++)for(int j=0;j<m;j++)(*this)[i][j]-=B[i][j];return (*this);}Matrix &operator*=(Matrix&B) {size_t n=height(),m=B.width(),p=width();vector<vector<T>> C(n,vector<T>(m,0));for(int i=0;i<n;i++)for(int j=0;j<m;j++)for(int k=0;k<p;k++)C[i][j]=(C[i][j]|((*this)[i][k]&B[k][j]))%MOD;A.swap(C);return (*this);}Matrix &operator^=(long long k){Matrix B=Matrix::E(height());while(k>0){if(k&1)B*=*this;*this*=*this;k>>=1LL;}A.swap(B.A);return (*this);}Matrix operator+(Matrix&B){return (Matrix(*this)+=B);}Matrix operator-(Matrix &B){return (Matrix(*this)-=B);}Matrix operator*(Matrix&B){return (Matrix(*this)*=B);}Matrix operator^(long long k){return (Matrix(*this)^=k);}};int main(){LL(n,m,t);Matrix<ll>a(n);rep(i,0,m){LL(u,v);a[v][u]=1;}if(t==MOD)MOD=mod;a^=t;ll ans=0;rep(i,0,n){if(a[i][0])ans++;}fin(ans);}