ural 1280. Topological Sorting

给你一个图,和它的拓扑排序,问这个拓排序列是否满足给的图。

 

直接找入度为0的点,删掉,然后和给的序列比较,如果题目给的点正好都是删掉前一个点后入度为0的点,那么就满足题意,否则就不是。

 

图有重边,WA了一次

 

#include <stdio.h> #include <stdlib.h> #include <iostream> #include <algorithm> #include <math.h> using namespace std; const int MAX = 1010; bool map[MAX][MAX]; int t[MAX],deg[MAX]; int n; bool solve() { for(int i=0; i<n; i++) { if( deg[t[i]] != 0 ) return false; for(int k=1; k<=n; k++) if( map[t[i]][k] ) deg[k]--; } return true; } int main() { int x,y; int m; memset(map,false,sizeof(map)); memset(deg,0,sizeof(deg)); scanf("%d %d",&n,&m); while( m-- ) { scanf("%d %d",&x,&y); if( !map[x][y] ) deg[y]++; map[x][y] = 1; } for(int i=0; i<n; i++) scanf("%d",&t[i]); bool ans = solve(); if( ans ) printf("YES/n"); else printf("NO/n"); return 0; }

你可能感兴趣的:(ural 1280. Topological Sorting)