Run ID 作者 问题 语言 测评结果 时间 内存 代码长度 提交时间
91094 sh25_shenpy 车站分级 C++ 通过 206 MS 4248 KB 1402 2026-06-12 15:04:15

Tests(10/10):


#include <bits/stdc++.h> using namespace std ; const int N = 1010 ; int n , m ; int G[N][N] ; int a[N] ; int b[N] ; bool vis[N] ; int topo[N] ; int in[N] ; int out[N] ; int dp[N] ; int tmp[N] ; int cur = 0 ; void topo_sort() { queue<int> q ; for(int i = 1 ; i <= n ; i++ ) { tmp[i] = in[i] ; if(in[i] == 0) q.push(i) ; } while(!q.empty()) { int x = q.front() ; q.pop() ; topo[++cur] = x ; for(int y = 1 ; y <= n ; y++ ) { if(G[x][y]) { if(--tmp[y] == 0) { q.push(y) ; } } } } } int main() { cin >> n >> m ; while(m--) { int s ; cur = 0 ; cin >> s ; for(int i = 1 ; i <= s ; i++ ) { cin >> a[i] ; vis[a[i]] = true ; } for(int i = a[1] ; i <= a[s] ; i++ ) if(vis[i] == false) b[++cur] = i ; for(int i = 1 ; i <= s ; i++ ) for(int j = 1 ; j <= cur ; j++ ) G[a[i]][b[j]] = 1 ; memset(vis , false , sizeof vis) ; } cur = 0 ; for(int i = 1 ; i <= n ; i++ ) for(int j = 1 ; j <= n ; j++ ) if(G[i][j]) in[j]++ , out[i]++ ; topo_sort() ; for(int i = 1 ; i <= n ; i++ ) if(in[i] == 0) dp[i] = 1 ; int ans = 0 ; for(int i = 1 ; i <= n ; i++ ) { int x = topo[i] ; for(int y = 1 ; y <= n ; y++ ) if(G[x][y]) dp[y] = max(dp[y] , dp[x] + 1) ; if(out[x] == 0) ans = max(ans , dp[x]) ; } cout << ans << endl ; return 0; }


测评信息: