标签:Balls int 3687 Labeling queueq maxn dp include inDeg
优先队列 + 反向拓扑
//#include<bits/stdc++.h> #include<iostream> #include<cstdio> #include<algorithm> #include<queue> #include<cstring> using namespace std; const int maxn = 1e5 + 7; int n, m; vector<int>G[maxn]; int inDeg[maxn]; int dp[maxn]; int cnt; int sum ,ans ; int mp[1000][1000]; bool topsort() { //queue<int>q; priority_queue<int>q; //queue<int>q; cnt = 0; sum = 0; while(!q.empty())q.pop(); for(int i = 1; i <= n ; i++) if(!inDeg[i]) q.push(i); while(!q.empty()) { int now = q.top(); q.pop(); // cout << now << endl; sum ++; dp[now] = n--; // cout << dp[now] << endl; for(int i = 0; i < G[now].size(); i++) { int to = G[now][i]; inDeg[to]--; if(!inDeg[to]) q.push(to); // dp[to] = max(dp[to],dp[now] + G[now][i].second); } } if(sum == ans)return 1; else return 0; } int main() { int t; ios::sync_with_stdio(false); cin.tie(0); cout.tie(0); // cin >> t; cin >> t; while(t--){ cin >> n >> m; ans = n; memset(inDeg,0,sizeof inDeg); memset(dp,0,sizeof dp); for(int i = 1; i <= n ; i++) G[i].clear(); while(m--) { int u, v, w; cin >> u >> v ; //if(mp[u][v] == 0) G[v].push_back(u); //G[v].push_back(make_pair((u,w))); inDeg[u] ++; } if(topsort()) //int maxx = 0; for(int i = 1; i <= ans ; i++) printf("%d%c",dp[i]," \n"[i == ans]); else puts("-1"); } return 0; }
标签:Balls,int,3687,Labeling,queueq,maxn,dp,include,inDeg 来源: https://www.cnblogs.com/DWVictor/p/11342809.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。