1 条题解
-
0
90分,第6题错
#include <iostream> #include <vector> #include <queue> #include <algorithm> using namespace std; const int MAXN=1005; vector<int> g[MAXN]; int in[MAXN]; int dp[MAXN]; int pre[MAXN]; vector<int> topo; int main(){ ios::sync_with_stdio(false); cin.tie(nullptr); int n,m; cin>>n>>m; fill(dp,dp+MAXN,1); fill(pre,pre+MAXN,-1); fill(in,in+MAXN,0); for(int i=0;i<m;i++){ int u,v; cin>>u>>v; g[u].push_back(v); in[v]++; } queue<int> q; for(int i=1;i<=n;i++){ if(in[i]==0) q.push(i); } while(!q.empty()){ int u=q.front(); q.pop(); topo.push_back(u); for(int v:g[u]){ if(dp[v]<dp[u]+1){ dp[v]=dp[u]+1; pre[v]=u; } in[v]--; if(in[v]==0) q.push(v); } } int max_len=0; int end_node=MAXN; for(int i=1;i<=n;i++){ if(dp[i]>max_len||(dp[i]==max_len&&i<end_node)){ max_len=dp[i]; end_node=i; } } vector<int> path; int cur=end_node; while(cur!=-1){ path.push_back(cur); cur=pre[cur]; } reverse(path.begin(),path.end()); cout<<max_len<<'\n'; for(size_t i=0;i<path.size();i++){ if(i>0) cout<<' '; cout<<path[i]; } cout<<'\n'; return 0; }
- 1
信息
- ID
- 126
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 10
- 标签
- 递交数
- 51
- 已通过
- 2
- 上传者