zoukankan      html  css  js  c++  java
  • 逃生(拓扑排序)

    传送门

    记录一下未解决的错误代码

    #include <iostream>
    #include <cstring>
    #include <vector>
    #include <queue>
    
    using namespace std;
    
    const int N = 100010;
    int tot, head[N], n, m, indegree[N];
    
    struct Edge{
    	int v, next;
    }edge[N];
    bool vis[N];
    void add(int u, int v){
    	edge[tot].v = v;
    	edge[tot].next = head[u];
    	head[u] = tot ++;
    }
    vector<int> vec; 
    void topsort(){
    	priority_queue<int, vector<int>, greater<int> >pq;
    	for(int i = 1; i <= n; i ++)
    		if(indegree[i] == 0)
    			pq.push(i);
    	while(pq.size()){
    		int t = pq.top();
    		vec.push_back(t);
    		pq.pop();
    		for(int i = head[t]; i != -1; i = edge[i].next){
    			int to = edge[i].v;
    			indegree[to] --;
    			if(indegree[to] == 0)
    				pq.push(to);
    		}
    	}
    }
    int main(){
    	int t;
    	cin >> t;
    	ios::sync_with_stdio(false);
    	while(t --){
    		vec.clear();
    		memset(vis, 0, sizeof vis);
    		memset(indegree, 0, sizeof indegree);
    		memset(head, -1, sizeof head);
    		tot = 0;
    		cin >> n >> m;
    		for(int i = 1; i <= m; i ++){
    			int a, b;
    			cin >> a >> b;
    			vis[a] = true;
    			vis[b] = true;
    			add(a, b);
    			indegree[b] ++;
    		}
    		topsort();
    		int size = vec.size();
    		for(int i = 0; i < size; i ++)
    			cout << vec[i] << ' ';
    		for(int i = 1; i <= n; i ++)
    			if(!vis[i])
    				cout << i << ' ';
    		cout << endl;
    	}
    	
    	return 0;
    }
    
  • 相关阅读:
    P4149 [IOI2011]Race dsu on tree
    CodeForces
    2020牛客国庆集训派对day2 CHEAP DELIVERIES
    Hero In Maze
    topo排序
    今年暑假不AC
    小国的游戏
    Stall Reservations
    博弈论
    Reversed Words
  • 原文地址:https://www.cnblogs.com/pureayu/p/14489097.html
Copyright © 2011-2022 走看看