zoukankan      html  css  js  c++  java
  • bzoj4010:[HNOI2015]菜肴制作

    传送门

    感觉智商越来越不在线了,这么水的题没秒掉
    一开始想的直接拿堆维护跑拓扑排序,后来发现看错题意了
    然后就一直想怎么拿并查集去维护树的最小值,后来发现维护不了,又GG了
    无奈之下看题解,这不就建个反图就没了吗,智商真的不在线

    #include<cstdio>
    #include<iostream>
    #include<algorithm>
    #include<queue>
    #include<cstring>
    using namespace std;
    void read(int &x) {
    	char ch; bool ok;
    	for(ok=0,ch=getchar(); !isdigit(ch); ch=getchar()) if(ch=='-') ok=1;
    	for(x=0; isdigit(ch); x=x*10+ch-'0',ch=getchar()); if(ok) x=-x;
    }
    #define rg register
    const int maxn=1e5+10;priority_queue<int>q;
    int D,n,m,pre[maxn*2],cnt,in[maxn],nxt[maxn*2],h[maxn],ans[maxn],tot;
    void add(int x,int y){pre[++cnt]=y,nxt[cnt]=h[x],h[x]=cnt;}
    void topsort()
    {
    	tot=0;
    	for(rg int i=1;i<=n;i++)if(!in[i])q.push(i);
    	while(!q.empty())
    	{
    		int x=q.top();q.pop();ans[++tot]=x;
    		for(rg int i=h[x];i;i=nxt[i])
    			if(!(--in[pre[i]]))q.push(pre[i]);
    	}
    	if(tot<n){printf("Impossible!
    ");return ;}
    	for(rg int i=tot;i;i--)printf("%d ",ans[i]);
    	printf("
    ");
    }
    int main()
    {
    	read(D);
    	while(D--)
    	{
    		read(n),read(m),cnt=0,memset(h,0,sizeof h),memset(in,0,sizeof in);
    		for(rg int i=1,x,y;i<=m;i++)read(x),read(y),in[x]++,add(y,x);
    		topsort();
    	}
    }
    
  • 相关阅读:
    C# MVC解决跨站请求伪造(appscan)
    .net中关于Url传参问题
    二月项目完成小结
    sql 获取时间
    ajax提交form表单
    C# 视图遍历List数组
    C#遍历指定文件夹中的所有文件
    C#关于文件的操作
    .net 文件上传到服务器【转】
    Server.MapPath获取各级目录【转】
  • 原文地址:https://www.cnblogs.com/lcxer/p/10567936.html
Copyright © 2011-2022 走看看