hdu 565 入门题

来源:互联网 发布:淘宝产品打折功能收费 编辑:程序博客网 时间:2024/05/29 18:33

点击打开题目


思路:当然是从大到小排序,分数才会最大,可是有限制不能完全按照大小排序,不过可以从已经排好的人去解除他人的限制,说白了,拓扑排序,很简单的一个题。

#include<cstdio>#include<queue>#include<algorithm>using namespace std;int vis[100001];vector<int>f[100001];int n,m;void clear(){for(int i=0;i<=n;i++){vis[i]=0;f[i].clear();}}void toposort(){int i,u;int m=9999999;long long ans=0;priority_queue<int,vector<int>,less<int> >q;for(i=1;i<=n;i++)if(!vis[i])q.push(i);while(!q.empty()){u=q.top();q.pop();m=min(m,u);ans+=m;for(i=0;i<f[u].size();i++){int t=f[u][i];vis[t]--;if(!vis[t])q.push(t);}}printf("%lld\n",ans);}int main(){int T;scanf("%d",&T);while(T--){int i,u,v;scanf("%d%d",&n,&m);clear();for(i=0;i<m;i++){scanf("%d%d",&u,&v);vis[v]++;f[u].push_back(v);}toposort();}}

原创粉丝点击