
用了STL,其他的没什么,赤裸裸的拓扑排序
下面给出代码
#include<cstdio> #include<iostream> #include<vector> #include<stack> using namespace std; int n,m,u,v; +],dis[+]; vector<+]; stack<int>str ; int main(){ cin >> n >> m; while(m--){ scanf("%d%d", &u, &v); du[v]++; map[u].push_back(v); //使用不定长减少使用的数组 ,单向联通 } ; i <= n; i++) // 统计 0的数量 ){ str.push(i); dis[i] = ; } while( !str.empty()){ //DFS搜索 u = str.top();str.pop(); ; i < map[u].size() ;i++){ v = map[u][i] ; dis[v] = max( dis[v],dis[u] + ); du[v] --; )str.push(v); } } ;i <= n; i++)printf("%d\n",dis[i]); printf("\n"); ; }