1 条题解
-
0

#include<bits/stdc++.h> using namespace std; const int N=2010; vector<pair<int,int>> e[N]; int n,m,a[N],vis[N]; int rd[N],d[N],ans=1; void topo(){ for(int i=1; i<=n; i++) d[i]=1; //最低级别为1 queue<int> q; for(int i=1; i<=n+m; i++) if(!rd[i]) q.push(i); while(!q.empty()){ int u=q.front(); q.pop(); for(auto [v,w]:e[u]){ d[v]=max(d[v],d[u]+w); //更新最长路 ans=max(ans,d[v]); if(--rd[v]==0) q.push(v); } } } int main(){ cin>>n>>m; //n个站点 m趟车次 for(int i=1,s; i<=m; i++){ memset(vis,0,sizeof vis); cin>>s; //停站个数 for(int j=1; j<=s; j++){ cin>>a[j]; vis[a[j]]=1; //停站标记 } int v=n+i; //建中间虚点 for(int j=a[1]; j<=a[s]; j++){ if(!vis[j]) e[j].emplace_back(v,0), rd[v]++; //不停站向虚点连边 else e[v].emplace_back(j,1), rd[j]++; //虚点向停站连边 } } topo(); cout<<ans; }
- 1
信息
- ID
- 674
- 时间
- 1000ms
- 内存
- 128MiB
- 难度
- 9
- 标签
- 递交数
- 12
- 已通过
- 4
- 上传者