标签:php efi 记录 span nbsp acm using gif 连通
今天整个晚自习又基本迷到tarjan里去了(现在还没搞清楚遍历,更新的次序,于是就还没写tarjan算法),看来图论的部分可能这一周能进行完就不错了(不过我每次都高估我自己)。今天有些匆忙,回宿舍还有一堆作业(看来今晚就不用睡了。。。还怎么没看过乌鲁木齐的日出呢。。。)。物理开始了磁场的新章节,虽然以前物竞的时候讲过,但有些都忘了。看近期能否把这一章的册子提前做完(划拉完。。)吧,这样就能腾出时间来机房了(自己进行算法的内容还真是比较耗时间,有时候1个多小时还不一定能调出一个算法,不过倒还挺享受这个过程的,就是眼睛有些酸痛)。至于跑步。。。以后还是不再提它了。。。反正只是嘴上说说<( ̄ ﹌  ̄)>
一.生成树性质
二.拓扑排序(对于一个DAG(有向无环图),求点的排序,使得排在后面的点不能通过一条路径到前面的点。)
例子:hdu-1285 http://acm.hdu.edu.cn/showproblem.php?pid=1285 (代码已ac)
用de数组记录被赢(即被指向)的次数,每次寻找没有被赢的队伍(即类比为没有被路指向的点),输出,再将它从点集中剔除,即将它所战胜的队伍的de值减1,再循环。
题中注意有多组数据,每行输出最后没有block(我就因为这两个原因wa和re了)
个人认为拓扑排序中可以加一步去判断是否含DAG(即de数组均大于0)
1 #include<cstdio> 2 #include<cstring> 3 #include<queue> 4 using namespace std; 5 #define maxn 501 6 int n,m,de[maxn],nvis; 7 bool map[maxn][maxn],vis[maxn],blok; 8 queue<int>q; 9 void init(){ 10 memset(vis,0,sizeof(vis)); 11 memset(de,0,sizeof(de)); 12 nvis=0; 13 blok=0; 14 memset(map,0,sizeof(map)); 15 return; 16 } 17 int main(){ 18 while(scanf("%d",&n)!=EOF){ 19 scanf("%d",&m); 20 init(); 21 for(int i=1;i<=m;++i){ 22 int s,e; 23 scanf("%d%d",&s,&e); 24 if(!map[s][e]){ 25 map[s][e]=1; 26 de[e]++; 27 } 28 } 29 while(nvis!=n){ 30 for(int i=1;i<=n;++i){ 31 if(de[i]==0&&vis[i]==0){ 32 if(!blok){ 33 blok=1; 34 } 35 else{ 36 printf(" "); 37 } 38 printf("%d",i); 39 nvis++; 40 vis[i]=1; 41 if(nvis==n)goto end; 42 q.push(i); 43 break; 44 } 45 } 46 while(!q.empty()){ 47 int pt=q.front(); 48 q.pop(); 49 for(int i=1;i<=n;++i){ 50 if(map[pt][i]==1&&vis[i]==0){ 51 map[pt][i]=0; 52 de[i]--; 53 } 54 } 55 } 56 } 57 end:printf("\n"); 58 } 59 return 0; 60 }
标签:php efi 记录 span nbsp acm using gif 连通
原文地址:http://www.cnblogs.com/hobeter/p/7571413.html