Advertisement
aqibm

Untitled

Apr 9th, 2025
14
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.45 KB | None | 0 0
  1. // O(n)
  2. void bfs(int u, vector<vector<int>>& g, vector<int>& vis){
  3. queue<int> q;
  4. q.push(u);
  5. while(!q.empty()){
  6. int v = q.front();
  7. vis[v] = 1;
  8. q.pop();
  9. for(int ch: g[v]){
  10. q.push(ch);
  11. }
  12. }
  13. }
  14.  
  15. // determine whether there are players whose rank is certain
  16. bool toposort(int n, vector<vector<int>>& g, vector<vector<int>>& g_inv){
  17. vector<int> indegree(n+1,0);
  18. for(auto& it: g){
  19. for(int children: it){
  20. indegree[children]++;
  21. }
  22. }
  23. // [1,2,3,4,5]
  24. // [0,3,1,0,1]
  25. queue<int> q;
  26. vector<int> tp;
  27. // o(n)
  28. for(int i=1;i<=n;i++){
  29. if(indegree[i]==0){
  30. q.push(i);
  31. }
  32. }
  33. // O(n)
  34. while(!q.empty())}{
  35. int player = q.front();
  36. q.pop();
  37. tp.push_back(player);
  38. for(auto& ch: g[player]){
  39. indegree[ch]--;
  40. if(indegree[ch]==0)
  41. q.push(ch);
  42. }
  43. }
  44. int last = tp[n-1];
  45. vector<int> vis(n+1,0);
  46. bfs(last,g_inv,vis);
  47.  
  48. // o(n)
  49. for(int i=1;i<=n;i++){
  50. if(vis[i]==0){
  51. return false;
  52. }
  53. }
  54. return true;
  55. }
  56.  
  57.  
  58.  
  59. }
  60.  
  61. bool game(int n, vector<vector<int>>& results) {
  62. vector<vector<int>> g(n+1);
  63. for(auto& it: results){
  64. int winner = it[0];
  65. int loser = it[1];
  66. g[winner].push_back(loser);
  67. ginv[loser].push_back(winner);
  68. }
  69. return toposort(n,g, g_inv);
  70. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement