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;
    }
    
  • 相关阅读:
    多版本node安装197
    linux 测试麦克风197
    解决linux写入ntfs盘时报错:只读文件系统197
    freemarker 解析纯json字符串197
    manjaro mysql安装197
    manjaro安装微信197
    manjaro 安装输入法197
    strings包 — 汇总
    proc 目录介绍
    learning、trying、teaching
  • 原文地址:https://www.cnblogs.com/pureayu/p/14489097.html
Copyright © 2011-2022 走看看