////#include<stdio.h>
////#include<string.h>
////#include<queue>
////#include<algorithm>
////using namespace std;
////const int INF=0x3f3f3f3f;
////const int MAXN=110;
////const int MAXM=20010;
////int top,vis[MAXN],dis[MAXN],head[MAXM];
////int N,M;
////queue<int>dl;
////struct Edge{
//// int from,to,value,next;
//// };
//// Edge edg[MAXM];
////void initial(){
//// top=0;
//// memset(vis,0,sizeof(vis));
//// memset(dis,INF,sizeof(dis));
//// memset(head,-1,sizeof(head));
//// while(!dl.empty())dl.pop();
////}
////void add(int u,int v,int value){
//// Edge E={u,v,value,head[u]};
//// edg[top]=E;
//// head[u]=top++;
////}
////void SPFA(int sx){
//// dl.push(sx);
//// dis[sx]=0;
//// vis[sx]=1;
//// while(!dl.empty()){
//// int u=dl.front();
//// dl.pop();
//// vis[u]=0;
//// for(int i=head[u];i!=-1;i=edg[i].next){
//// int v=edg[i].to;
//// if(dis[u]+edg[i].value<dis[v]){
//// dis[v]=dis[u]+edg[i].value;
//// if(!vis[v]){
//// vis[v]=1;
//// dl.push(v);
//// }
//// }
//// }
//// }
//// printf("%d\n",dis[N]);
////}
////int main(){
//// int a,b,c;
//// while(~scanf("%d%d",&N,&M),N|M){
//// initial();
//// while(M--){
//// scanf("%d%d%d",&a,&b,&c);
//// add(a,b,c);
//// add(b,a,c);
//// }
//// SPFA(1);
//// }
//// return 0;
////}
///**********************************************/
//#include<stdio.h>
//#include<string.h>
//const int MAXN=110;
//const int INF=0x3f3f3f3f;
//int map[MAXN][MAXN],vis[MAXN],dis[MAXN];
//int N,M;
//void initial(){
// memset(map,INF,sizeof(map));
// memset(vis,0,sizeof(vis));
// memset(dis,INF,sizeof(dis));
//}
//void dijskra(int sx){
// dis[sx]=0;
// while(true){
// int k=-1;
// for(int i=1;i<=N;i++)
// if(!vis[i]&&(k==-1||dis[i]<dis[k]))k=i;
// if(k==-1)break;
// vis[k]=1;
// for(int i=1;i<=N;i++)
// if(!vis[i]&&dis[k]+map[k][i]<dis[i])
// dis[i]=dis[k]+map[k][i];
// }
// printf("%d\n",dis[N]);
//}
//void add(){
// int a,b,c;
// while(M--){
// scanf("%d%d%d",&a,&b,&c);
// map[a][b]=map[b][a]=c;
// }
//}
//int main(){
// while(~scanf("%d%d",&N,&M),N|M){
// initial();
// add();
// dijskra(1);
// }
// return 0;
//}
///**********************************************/
//#include<stdio.h>
//#include<string.h>
//const int MAXN=10010;
//const int INF=0x3f3f3f3f;
//int N,M,ans,flot;
//int vis[MAXN],dis[MAXN],map[MAXN][MAXN];
//void initial(){
// memset(vis,0,sizeof(vis));
// memset(dis,0x3f,sizeof(dis));
// memset(map,0x3f,sizeof(map));
// ans=0;
// flot=1;
//}
//void prime(){
// vis[1]=1;
// for(int i=1;i<=N;i++)dis[i]=map[1][i];
// while(true){
// int temp=INF,k;
// for(int i=1;i<=N;i++)
// if(!vis[i]&&dis[i]<temp)temp=dis[k=i];
// if(temp==INF)break;
// vis[k]=1;
// flot++;
// ans+=temp;
// for(int i=1;i<=N;i++)
// if(!vis[i]&&map[k][i]<dis[i])dis[i]=map[k][i];
// }
// printf("%d %d\n",ans,flot);
//}
//void add(){
// while(M--){int a,b,c;
// scanf("%d%d%d",&a,&b,&c);
// map[a][b]=map[b][a]=c;
// }
//}
//int main(){
// while(~scanf("%d%d",&N,&M),N|M){
// initial();
// add();
// prime();
// }
// return 0;
//}
/*********************************************/
#include<stdio.h>
#include<string.h>
#include<queue>
using namespace std;
const int MAXN=;
const int MAXM=;
int head[MAXM];
struct Edge{
int frome,to,next;
};
Edge edg[MAXM];
int N,M;
int que[MAXN],ans[MAXN],top,edgnum;
priority_queue<int,vector<int>,greater<int> >dl; void initial(){
memset(head,-,sizeof(head));
while(!dl.empty())dl.pop();
memset(que,,sizeof(que));
top=;edgnum=;
}
void topu(){
for(int i=;i<=N;i++)
if(!que[i])dl.push(i);
while(!dl.empty()){
int k=dl.top();
dl.pop();
ans[top++]=k;
for(int i=head[k];i!=-;i=edg[i].next){
que[edg[i].to]--;
if(que[edg[i].to]==)dl.push(edg[i].to);
}
}
for(int i=;i<top;i++)printf("%d ",ans[i]);puts("");
}
void add(int a,int b){
Edge E={a,b,head[a]};
edg[edgnum]=E;
head[a]=edgnum++;
}
void get(){
int a,b;
while(M--){
scanf("%d%d",&a,&b);
que[b]++;
add(a,b);
}
}
int main(){
while(~scanf("%d%d",&N,&M),N|M){
initial();
get();
topu();
}
return ;
}

SPFA,dijskra,prime,topu四种算法的模板的更多相关文章

  1. 算法入门:最大子序列和的四种算法(Java)

    最近再学习算法和数据结构,推荐一本书:Data structures and Algorithm analysis in Java 3rd 以下的四种算法出自本书 四种最大子序列和的算法: 问题描述 ...

  2. TCP控制拥塞的四种算法:慢开始,拥塞避免,快重传,快恢复

    我们在开始假定: 1:数据是单方向传递,另一个窗口只发送确认. 2:接收方的缓存足够大,因此发送方的大小的大小由网络的拥塞程度来决定. 一:慢开始算法和拥塞避免算法 发送方会维持一个拥塞窗口,刚开始的 ...

  3. 洛谷P1218 [USACO1.5]特殊的质数肋骨 Superprime Rib 使用四种算法

    洛谷P1218 [USACO1.5]特殊的质数肋骨 Superprime Rib 水题一道…… 题目描述 农民约翰的母牛总是产生最好的肋骨.你能通过农民约翰和美国农业部标记在每根肋骨上的数字认出它们. ...

  4. 【2018寒假集训Day 7】【最短路径】三种算法的模板

    Luogu单源最短路径模版题 dijkstra #include<cstdio> #include<vector> using namespace std; const int ...

  5. php四种排序算法实现代码

    分享php排序的四种算法与代码. 冒泡:function bubble_sort($arr){ $num = count($arr); for($i=0;$i<$num;$i++){ for($ ...

  6. 图像处理之增强---图像增强算法四种,图示与源码,包括retinex(ssr、msr、msrcr)和一种混合算法

    申明:本文非笔者原创,原文转载自:http://blog.csdn.net/onezeros/article/details/6342661 两组图像:左边较暗,右边较亮 第一行是原图像,他们下面是用 ...

  7. Dubbo -- 四种loadBalance负载均衡算法

    Dubbo中的一个关键接口LoadBalance,dubbo是按照其中的规则来调用多台provider的服务的. 先看一下接口的实现类图: 从上图中我们可以看到dubbo提供了四种算法来实现负载均衡. ...

  8. 【OpenGL学习】 四种绘制直线的算法

    我是用MFC框架进行测试的,由于本人也没有专门系统学习MFC框架,代码若有不足之处,请指出. 一,先来一个最简单的DDA算法 DDA算法全称为数值微分法,基于微分方程来绘制直线. ①推导微分方程如下: ...

  9. Java实现操作系统中四种动态内存分配算法:BF+NF+WF+FF

    1 概述 本文是利用Java实现操作系统中的四种动态内存分配方式 ,分别是: BF NF WF FF 分两部分,第一部分是介绍四种分配方式的概念以及例子,第二部分是代码实现以及讲解. 2 四种分配方式 ...

随机推荐

  1. 如何让旧版IE浏览器认识HTML5元素

    <!--[if lt IE 9]> <script src="http://html5shiv.googlecode.com/svn/trunk/html5.js" ...

  2. 【Leetcode】二叉树层遍历算法

    需求: 以层遍历一棵二叉树,二叉树的结点结构如下 struct tree_node{ struct tree_node *lc; struct tree_node *rc; int data; }; ...

  3. android安卓开发问题集 XMPP篇

    1.消息推送查了下资料,后面还是使用了androidpn (1)java.security.KeyStoreException: KeyStore jks implementation not fou ...

  4. 让app在ios6上具有ios7的扁平效果

    使用cocoapods在工程中加入UI7Kit,关于UI7Kit请自行google. 加入到工程 如果没安装cocoapods,则安装.(http://www.cocoapods.org) 安装方法: ...

  5. Makefile与Shell的问题

    http://blog.csdn.net/absurd/article/details/636418 Makefile与Shell的问题 大概只要知道Makefile的人,都知道Makefile可以调 ...

  6. OpenCms创建站点过程图解——献给OpenCms的刚開始学习的人们

    非常多人都听说了OpenCms,知道了它的强大,索性的下载安装了,最终见到了久违OpenCms,看到了它简洁的界面,欣喜过后却不免一脸茫然,这个东西怎么用,我怎么用它来建站,从哪開始,无从下手,找资料 ...

  7. 《面试题精选》15.O(logn)求Fibonacci数列

    题目:定义Fibonacci数列例如以下: /    0                      n=0 f(n)=      1                      n=1          ...

  8. (原)前端知识杂烩(meta系列)

    更新于 20160831 1. meta 移动端头文件设置 (一般情况下,逐条复制放在头部就可以了) 1.1 强制让文档的宽度与设备的宽度保持1:1,并且文档最大的宽度比例是1.0,且不允许用户点击屏 ...

  9. css3文本效果

    CSS3 包含多个新的文本特性. 在本章中,您将学到如下文本属性: 1. text-shadow 2. word-wrap 浏览器支持 Internet Explorer 10.Firefox.Chr ...

  10. Linq to sql 实现多条件的动态查询(方法一)

    /// <summary> /// Linq to sql 多字段动态查询 /// </summary> /// <returns></returns> ...