結果

問題 No.1660 Matrix Exponentiation
ユーザー suzuken_wsuzuken_w
提出日時 2021-08-28 00:56:51
言語 C++17
(gcc 12.3.0 + boost 1.83.0)
結果
AC  
実行時間 66 ms / 2,000 ms
コード長 1,821 bytes
コンパイル時間 3,065 ms
コンパイル使用メモリ 220,084 KB
実行使用メモリ 12,540 KB
最終ジャッジ日時 2024-05-01 05:51:27
合計ジャッジ時間 4,217 ms
ジャッジサーバーID
(参考情報)
judge2 / judge5
このコードへのチャレンジ
(要ログイン)

テストケース

テストケース表示
入力 結果 実行時間
実行使用メモリ
testcase_00 AC 2 ms
5,248 KB
testcase_01 AC 2 ms
5,376 KB
testcase_02 AC 2 ms
5,376 KB
testcase_03 AC 2 ms
5,376 KB
testcase_04 AC 1 ms
5,376 KB
testcase_05 AC 1 ms
5,376 KB
testcase_06 AC 2 ms
5,376 KB
testcase_07 AC 1 ms
5,376 KB
testcase_08 AC 2 ms
5,376 KB
testcase_09 AC 7 ms
9,728 KB
testcase_10 AC 6 ms
9,700 KB
testcase_11 AC 5 ms
9,716 KB
testcase_12 AC 2 ms
5,376 KB
testcase_13 AC 2 ms
5,376 KB
testcase_14 AC 1 ms
5,376 KB
testcase_15 AC 2 ms
5,376 KB
testcase_16 AC 2 ms
5,376 KB
testcase_17 AC 2 ms
5,376 KB
testcase_18 AC 1 ms
5,376 KB
testcase_19 AC 26 ms
9,468 KB
testcase_20 AC 18 ms
9,088 KB
testcase_21 AC 29 ms
5,888 KB
testcase_22 AC 6 ms
7,424 KB
testcase_23 AC 17 ms
7,552 KB
testcase_24 AC 66 ms
12,540 KB
testcase_25 AC 28 ms
10,184 KB
testcase_26 AC 59 ms
12,540 KB
testcase_27 AC 26 ms
11,884 KB
testcase_28 AC 32 ms
11,428 KB
testcase_29 AC 30 ms
11,776 KB
権限があれば一括ダウンロードができます

ソースコード

diff #

#pragma GCC optimize("O3")
#include<bits/stdc++.h> 
using namespace std;
using ll=long long;
using P=pair<ll,ll>;
template<class T> using V=vector<T>; 
#define fi first
#define se second
#define all(v) (v).begin(),(v).end()
const ll inf=(1e18);
//const ll mod=998244353;
const ll mod=1000000007;
const vector<int> dy={-1,0,1,0},dx={0,-1,0,1};
ll GCD(ll a,ll b) {return b ? GCD(b,a%b):a;}
ll LCM(ll c,ll d){return c/GCD(c,d)*d;}
struct __INIT{__INIT(){cin.tie(0);ios::sync_with_stdio(false);cout<<fixed<<setprecision(20);}} __init;
template<class T> bool chmax(T &a, const T &b) { if (a<b) { a=b; return 1; } return 0; }
template<class T> bool chmin(T &a, const T &b) { if (a>b) { a=b; return 1; } return 0; }
template<class T>void debag(const vector<T> &a){cerr<<"debag :";for(auto v:a)cerr<<v<<" ";cerr<<"\n";}
template<class T>void print(const vector<T> &a){for(auto v:a)cout<<v<<" ";cout<<"\n";}
struct tposort{
	int n;
	vector<vector<int> > G;
	vector<int> deg,res,dp;
	tposort(int node_size):n(node_size), G(n), deg(n, 0) ,dp(n,0){}
	
    void add_edge(int from,int to){
		G[from].push_back(to);
		deg[to]++;
	}
	bool solve(){
		queue<int> q;
		for(int i = 0; i < n; i++){
			if(deg[i] == 0){
				q.push(i);
                        dp[i]=1;
			}
		}
		while(!q.empty()){
			int cur = q.front();
			q.pop();
			res.push_back(cur);
			for(int v :G[cur]){
				if(--deg[v]==0){
                              dp[v]=dp[cur]+1;
					q.push(v);
				}
			}
		}
		return (*max_element(deg.begin(),deg.end()) == 0);
	}
};
int main(){
      int n,k;
      cin>>n>>k;
      V<V<int>> g(n);
      tposort tp(n);
      for(int i=0;i<k;i++){
            int a,b;
            cin>>a>>b;
            --a;--b;
            tp.add_edge(a,b);
      }
      if(!tp.solve())cout<<-1<<"\n";
      else cout<<*max_element(all(tp.dp))<<"\n";
}
0