扬州做企业网站哪家公司好,一个网站需要多少钱,查询做导员的网站,单位网站建设意见模板
常用代码模板3——搜索与图论 - AcWing
拓扑排序 —— 模板题 AcWing 848. 有向图的拓扑序列 时间复杂度 O(nm), n 表示点数#xff0c;m 表示边数
bool topsort()
{int hh 0, tt -1;// d[i] 存储点i的入度for (int i 1; i n; i )if (!d[i])q[ tt] i;while…模板
常用代码模板3——搜索与图论 - AcWing
拓扑排序 —— 模板题 AcWing 848. 有向图的拓扑序列 时间复杂度 O(nm), n 表示点数m 表示边数
bool topsort()
{int hh 0, tt -1;// d[i] 存储点i的入度for (int i 1; i n; i )if (!d[i])q[ tt] i;while (hh tt){int t q[hh ];for (int i h[t]; i ! -1; i ne[i]){int j e[i];if (-- d[j] 0)q[ tt] j;}}// 如果所有点都入队了说明存在拓扑序列否则不存在拓扑序列。return tt n - 1;
}
3704. 排队 - AcWing题库
N 个小朋友编号 1∼N要排成一队。
在安排每个人的顺序时有 M个要求每个要求包含两个整数 a,b表示小朋友 a 要排在小朋友 bb 的前面。
请你找出符合所有要求的排队顺序。
输入格式 第一行包含整数 N,M。
接下来 M行每行包含两个整数 a,b。
输出格式 按排好队列从前到后的顺序在一行内输出每个小朋友的编号。
保证至少存在一个符合条件的顺序。
当符合条件的排队顺序不唯一时编号更小的小朋友尽量更靠前。
数据范围 1≤N≤500, 1≤M≤5000, 1≤a,b≤N, 保证数对 (a,b)各不相同。
输入样例 4 3 1 2 2 3 4 3 输出样例 1 2 4 3 ///拓扑排序
//先构造图有向图
//进行拓扑排序
//每次选择入度是0的节点如果不止一个找到最小的#includeiostream
#includecstring
#includequeue
#includealgorithmusing namespace std;
const int N510,M5010;
int ha[N],e[M],nx[M];
int idx;
int d[N];//入度
int n,m;
//将b添加到以节点a开头的邻接表中
void add(int a,int b){//添加一条a--b的边e[idx]b;//第idx个边终点是bnx[idx]ha[a];//头插法ha[a]idx;//头插法idx;//地址
}
void topsort(){priority_queueint,vectorint,greaterint heap;for(int i 1;i n ; i){if(!d[i]) heap.push(i);}while(heap.size()){auto t heap.top();printf(%d ,t);heap.pop();for(int i ha[t]; i! -1; inx[i]){int j e[i];if(--d[j]0){heap.push(j);}}}
}int main(){scanf(%d%d,n,m);memset(ha,-1,sizeof(ha));//情况表头int a,b;for(int i 1; i m; i){scanf(%d%d,a,b);//读边d[b];add(a,b);}topsort();return 0;
}