【圖論】拓撲排序+優先佇列
#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
#include<stack>
#include<queue>
#include<deque>
#include<vector>
#include<map>
#include<algorithm>
using namespace std;
typedef long long LL;
//#pragma comment(linker, "/STACK:102400000,102400000")
const double PI = acos(-1.0);
const double eps = 1e-6;
const int INF=0x3f3f3f3f;
const int N=100010;
const LL mod = 1e9+7;
struct asd
{
string name;
int in;
int id;
} a[N];
struct cmp
{
bool operator()(asd &a,asd &b)
{
if(a.in != b.in)
return a.in > b.in;
return a.name > b.name;
}
};
map<string,int> mp;
vector<int> ma[N];
int idx;
int creat(string s)
{
if(mp[s]==0)
{
mp[s] = idx;
a[idx].id = idx;
a[idx++].name = s;
}
return mp[s];
}
int n;
int main()
{
string s;
while(cin >> n)
{
priority_queue<asd,vector<asd>,cmp> Q;
idx = 0;
mp.clear();
for(int i = 0; i < n; i++)
{
cin >> s;
string name = "";
for(int i = 0; i < s.length(); i++)
{
int from,to;
if(s[i] == '(')
{
from = creat(name);
name = "";
}
else if(s[i] == ')' || s[i] == ',')
{
if(name != "NULL")
{
to = creat(name);
a[to].in++;
ma[from].push_back(to);
}
name = "";
}
else
name += s[i];
}
}
//cout << idx << endl;
for(int j = 0; j < idx; j++)
{
if(a[j].in == 0)
Q.push(a[j]);
}
int frist = 1;
while(!Q.empty())
{
asd temp = Q.top();
Q.pop();
if(frist){
cout << temp.name;
frist = 0;
}
else
cout << " " << temp.name;
for(int i = 0; i < ma[temp.id].size(); i++)
{
a[ma[temp.id][i]].in--;
if(a[ma[temp.id][i]].in == 0)
Q.push(a[ma[temp.id][i]]);
}
}
cout << endl;
}
return 0;
}
相關文章
- 圖論——拓撲排序圖論排序
- Reward (圖論+拓撲排序)圖論排序
- 演算法-圖論-拓撲排序演算法圖論排序
- 優先佇列和堆排序佇列排序
- 堆排序與優先佇列排序佇列
- 拓撲排序排序
- 有向圖的拓撲排序——DFS排序
- 拓撲排序,YYDS排序
- 拓撲排序模板排序
- 堆、堆排序和優先佇列的那些事排序佇列
- PHP優先佇列PHP佇列
- 堆--優先佇列佇列
- 優先佇列 (轉)佇列
- 圖解拓撲排序+程式碼實現圖解排序
- 拓撲排序小結排序
- 筆記:拓撲排序筆記排序
- 圖的拓撲排序詳解與實現排序
- 圖(3)--拓撲排序與關鍵路徑排序
- 拓撲排序 (BFS )DAG (有向無環圖)排序
- 淺談優先佇列佇列
- STL 優先佇列 用法佇列
- 堆與優先佇列佇列
- 堆和優先佇列佇列
- CSP之公共鑰匙盒(模擬、排序、優先佇列)排序佇列
- 堆和堆的應用:堆排序和優先佇列排序佇列
- 拓撲排序 - Topological Sort排序
- 拓撲排序核心程式碼排序
- HDU 4857 逃生(拓撲排序)排序
- 【筆記/模板】拓撲排序筆記排序
- AOV網與拓撲排序排序
- DFS實現拓撲排序排序
- 最詳細版圖解優先佇列(堆)圖解佇列
- 演算法資料結構 | 圖論基礎演算法——拓撲排序演算法資料結構圖論排序
- Java優先佇列(PriorityQueue)示例Java佇列
- MYSQL實現ORDER BY LIMIT的方法以及優先佇列(堆排序)MySqlMIT佇列排序
- 完全二叉樹實現優先佇列與堆排序二叉樹佇列排序
- 拓撲排序就這麼回事排序
- HDU4857逃生(拓撲排序)排序