• 逃生


    Description

    糟糕的事情发生啦,现在大家都忙着逃命。但是逃命的通道很窄,大家只能排成一行。 

    现在有n个人,从1标号到n。同时有一些奇怪的约束条件,每个都形如:a必须在b之前。 
    同时,社会是不平等的,这些人有的穷有的富。1号最富,2号第二富,以此类推。有钱人就贿赂负责人,所以他们有一些好处。 

    负责人现在可以安排大家排队的顺序,由于收了好处,所以他要让1号尽量靠前,如果此时还有多种情况,就再让2号尽量靠前,如果还有多种情况,就让3号尽量靠前,以此类推。 

    那么你就要安排大家的顺序。我们保证一定有解。

    Input

    第一行一个整数T(1 <= T <= 5),表示测试数据的个数。 
    然后对于每个测试数据,第一行有两个整数n(1 <= n <= 30000)和m(1 <= m <= 100000),分别表示人数和约束的个数。 

    然后m行,每行两个整数a和b,表示有一个约束a号必须在b号之前。a和b必然不同。

    Output

    对每个测试数据,输出一行排队的顺序,用空格隔开。

    Sample Input

    1
    5 10
    3 5
    1 4
    2 5
    1 2
    3 4
    1 4
    2 3
    1 5
    3 5
    1 2

    Sample Output

    1 2 3 4 5

     反向建图,将大的优先级放前面,然后逆序输出

    #include<cstdio>
    #include<cstring>
    #include<queue>
    using namespace std;
    struct node
    {
    	int fu,qiong,next;
    }ren[3000001];
    int n,m,cut;
    int die[3000001];
    int cun[3000001];
    int head[3000001];
    void add(int x,int y)
    {
    	ren[cut].fu =x;
    	ren[cut].qiong =y;
    	ren[cut].next =head[x];
    	head[x]=cut++;
    }
    void topo()
    { 
           priority_queue<int>q;
           for(int i=1;i<=n;i++)
           {
           	   if(die[i]==0)
           	   q.push(i);
    	   }
    	   int ans=0;
    	   while(!q.empty())
    	   {
    	   	int first=q.top();
    	   	cun[ans++]=first;
    	   	q.pop();
    	   		for(int j=head[first];j!=-1;j=ren[j].next )
    		{
    	      die[ren[j].qiong]--;
    	      if(die[ren[j].qiong ]==0)
    	      {
    	      	q.push(ren[j].qiong );
    		  }
    		}
    	   }
    	  for(int i=n-1;i>0;i--)
    	  {
    	  	printf("%d ",cun[i]);
    	  }
    	  printf("%d
    ",cun[0]);	
    }
    int main()
    {     
         int t;
         scanf("%d",&t);
    	while(t--)
    	{
    	       scanf("%d%d",&n,&m);
    	       memset(die,0,sizeof(die));
    	       memset(head,-1,sizeof(head));
    	       cut=0;
    		int x,y;
    	     for(int i=0;i<m;i++)
    	     {
    	     		scanf("%d%d",&x,&y);
    	     	     add(y,x);
    	              die[x]++;
    				 }
    		topo();
    		}
    	return 0;
    }


  • 相关阅读:
    《代码整洁之道》
    SharePoint Use backup, restore and export
    sharepoint站点支持AJAX功能做些简要说明
    使用vbs或者bat脚本修改IE浏览器安全级别和选项
    创建 Silverlight 应用程序以访问 SharePoint 2010 数据
    CPU使用率过高的 9种可能
    几条在SharePoint中使用SilverLight注意事项
    通过WebService操作SharePoint列表数据
    开发部署Sharepoint自定义webservice
    SQL Server发送邮件的存储过程
  • 原文地址:https://www.cnblogs.com/kingjordan/p/12027083.html
Copyright © 2020-2023  润新知