有史以来我最坑的一次,hdu5195 DZY Loves Topological Sorting 拓扑序
来源:互联网 发布:网吧公告软件 编辑:程序博客网 时间:2024/05/19 12:24
//这题可算是历经千辛万苦才算ac了//建图,然后就拓扑序,//还是官方的bc的题解出的好//贪心取编号最大的点//令du[i]<=k的i进入优先队列//然后依次整就行了,//每次取出的点,判断一下//是否du[i]<=k,如果小于//依次遍历与他相邻的点,//在这些相邻的点中找到du[j]<=k//且不在队列当中的i的值,//开始用g++交题,一直TLE,//用高效一点的邻接表,还是TLE//然后用c++交题,结果。。。ac了//TLE了十多发。。。//发誓:以后只用c++交题了。。。555<img src="http://img.blog.csdn.net/20150329011213043?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvVElNRUxJTUlURQ==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" height="40" width="326" alt="" />#include <cstdio>#include <cstring>#include <vector>#include <algorithm>#include <queue>#include <set>using namespace std;const int maxn = 1e5 + 50;vector<int> mp[maxn];int n,m,k;struct Edge{ int v; int next;}edges[maxn];int adj[maxn];int edgenum;void addEdge(int u,int v){ edges[edgenum].v=v; edges[edgenum].next=adj[u]; adj[u]=edgenum++;}int du[maxn];int a[maxn];int inq[maxn];int cnt;void tupo(){// for (int i=1;i<=n;i++){// set<int> st;// for (int j=adj[i];j!=-1;j=edges[j].next){//// st.insert(edges[j].v);// du[edges[j].v]++;// }//// for (set<int>::iterator it=st.begin();it!=st.end();it++){//// du[*it]++;//// }// } priority_queue<int> que;// for (int i=n;i>=1;i--)// printf("%d ",du[i]);// puts(""); for (int i=n;i>=1;i--){ if (du[i]<=k){ que.push(i); inq[i]=1; //k= k-du[i]; //du[i]=0; // printf("k:%d\n",k); } } int flag = 0; while(!que.empty()){ int u = que.top(); que.pop(); if (k<du[u]){ inq[u]=0; continue; } k-=du[u]; // a[cnt++]=u; for (int i=adj[u];i!=-1;i=edges[i].next){ int t = edges[i].v; du[t]--; if (!inq[t]&&du[t]<=k){ inq[t]=1; que.push(t); } } if (flag) putchar(' '); flag = 1; printf("%d",u); } puts("");}void init(){// memset(du,0,sizeof(du));// memset(inq,0,sizeof(inq));// cnt=0;// memset(adj,-1,sizeof(adj)); for (int i=1;i<=n;i++){ du[i]=0; inq[i]=0; adj[i]=-1; } edgenum=0; while(m--){ int a,b; scanf("%d%d",&a,&b);// if (find(mp[a].begin(),mp[a].end(),b)!=mp[a].end())// continue; edges[edgenum].v=b; edges[edgenum].next=adj[a]; adj[a]=edgenum++; du[b]++;// mp[a].push_back(b); } //for (int i=1;i<=n;i++) //sort(mp[i],mp[i]+mp[i].size(),cmp);}void solve(){ tupo();}int main(){ // freopen("G:\\Code\\1.txt","r",stdin); while(scanf("%d%d%d",&n,&m,&k)!=EOF){ init(); solve(); }}
1 0
- 有史以来我最坑的一次,hdu5195 DZY Loves Topological Sorting 拓扑序
- hdu5195 DZY Loves Topological Sorting 线段树+拓扑排序
- [线段树] hdu5195 DZY Loves Topological Sorting
- HDU 5195 DZY Loves Topological Sorting 拓扑序(贪心)
- (拓扑排序)DZY Loves Topological Sorting
- HDU 5195 DZY Loves Topological Sorting (拓扑排序+线段树)
- Hdoj 5195 DZY Loves Topological Sorting 【拓扑】+【线段树】
- BC DZY Loves Topological Sorting
- HDU 5195 DZY Loves Topological Sorting
- hdu 5195 DZY Loves Topological Sorting
- HDU 5195 DZY Loves Topological Sorting
- HDU 5195 DZY Loves Topological Sorting
- 【HDU】5195-DZY Loves Topological Sorting(拓扑 + 线段树 + 贪心)
- hdu 5195 DZY Loves Topological Sorting【拓扑排序+优先队列+邻接表】
- HDU 5195 DZY Loves Topological Sorting(线段树)
- BestCoder Round #35(DZY Loves Topological Sorting-堆+贪心)
- hdu 5195 DZY Loves Topological Sorting && BestCoder Round #35
- HDU 5195 DZY Loves Topological Sorting(优先队列)
- index_02_2 中间 css
- Windows 7 下Tortoise图标无法显示解决办法
- index_02_3 中间 js
- index_02_1 中间 html
- POJ - 1797 Heavy Transportation
- 有史以来我最坑的一次,hdu5195 DZY Loves Topological Sorting 拓扑序
- srm 300 div2 1000(贪心进阶)
- C++ 智能指针
- LeetCode - Largest Rectangle in Histogram
- NSURLSession使用
- QUARTZ.NET 一个定时任务框架
- Android 不可缺少的异步(Thread、Handler、AsyncTask)
- 【iOS开发】观察者模式-通知的使用及深入理解
- 父型擦纳桶驼财貌涸埠泄站俾廊伊