hdu5413
2015-08-24 11:33
344 查看
通过这道题新学了一个bitset,本来是用的数组,超空间,换成bitset就不超了,本来用的是循环,超时,换成bitset的操作,就不超时了,一定要把bitset拆开看看。
还有,虽然这次没用到,但是针对于递归太多爆栈,终于知道了要用 #pragma comment(linker,"/STACK:1024000000,1024000000").
这道题近似于暴力,只不过要转化一下。
代码参考:http://blog.csdn.net/u013007900/article/details/47842179
bitset参考:http://blog.163.com/lixiangqiu_9202/blog/static/53575037201251121331412/
http://www.cnblogs.com/lvpengms/archive/2010/04/10/1708836.html
(昨天和队友偷偷的在宿舍吃了火锅,虽然过程坎坷,但是最后成功的吃到了!
)
2015.8.29:
给队友讲了这道题,所以对这道题印象挺深的,对于这道题,感叹,以前总感觉用那些现成的什么vector,set不算什么英雄好汉,上c++课说过这类已经写好的代码用处有限,还被老师给纠正了,现在感觉这些东西好神奇,都是天神(天上的大神,大神中的大神,大神中的战斗机)写出来的,希望自己也能写出这些,然后就能自己用自己的了,想想就小窃喜呢
!
还有,虽然这次没用到,但是针对于递归太多爆栈,终于知道了要用 #pragma comment(linker,"/STACK:1024000000,1024000000").
这道题近似于暴力,只不过要转化一下。
代码参考:http://blog.csdn.net/u013007900/article/details/47842179
bitset参考:http://blog.163.com/lixiangqiu_9202/blog/static/53575037201251121331412/
http://www.cnblogs.com/lvpengms/archive/2010/04/10/1708836.html
(昨天和队友偷偷的在宿舍吃了火锅,虽然过程坎坷,但是最后成功的吃到了!
)
2015.8.29:
给队友讲了这道题,所以对这道题印象挺深的,对于这道题,感叹,以前总感觉用那些现成的什么vector,set不算什么英雄好汉,上c++课说过这类已经写好的代码用处有限,还被老师给纠正了,现在感觉这些东西好神奇,都是天神(天上的大神,大神中的大神,大神中的战斗机)写出来的,希望自己也能写出这些,然后就能自己用自己的了,想想就小窃喜呢
!
#include<stdio.h> #include<string.h> #include<iostream> #include<bitset> using namespace std; #define N 20010 #define M 100010 #pragma comment(linker, "/STACK:1024000000,1024000000") //bool kd ; bitset<N> bs ;//将bool换成bitset就不超空间了 int head ,to[M],nextedge[M]; int order ; int fro ; int sq ; int cou; int edge[M][2]; void add(int a,int b){ to[cou]=b;nextedge[cou]=head[a];head[a]=cou++; } int main(){ int t; int n,m; int a,b; int ans; scanf("%d",&t); while(t--){ scanf("%d%d",&n,&m); cou=0; memset(head,-1,sizeof(head)); //memset(kd,false,sizeof(kd)); for(int i=1;i<=n;i++){ bs[i].reset(); } memset(fro,0,sizeof(fro)); for(int i=0;i<m;i++){ scanf("%d%d",&a,&b); edge[i][0]=a; edge[i][1]=b; add(a,b); fro[b]++; } int qend=0; int oend=0; for(int i=1;i<=n;i++){ if(fro[i]==0){ sq[qend++]=i; order[oend++]=i; } } while(qend!=0){ int temp=sq[--qend]; for(int i=head[temp];i!=-1;i=nextedge[i]){ int v=to[i]; fro[v]--; if(!fro[v]){ order[oend++]=v; sq[qend++]=v; } } } /*for(int i=0;i<oend;i++){ printf("%d ",order[i]); } printf("\n");*/ for(int i=oend-1;i>=0;i--){//感觉是这里浪费了很多时间,应该要简化一下。 int u=order[i]; for(int j=head[u];j!=-1;j=nextedge[j]){ int v=to[j]; //kd[u][v]=true; bs[u][v]=1; /*for(int k=1;k<=n;k++){ //kd[u][k]=kd[v][k]; if(bs[v][k]){ bs[u][k]=1; } }*/ bs[u]|=bs[v]; } } ans=0; for(int i=0;i<m;i++){ int u=edge[i][0]; int v=edge[i][1]; for(int j=head[u];j!=-1;j=nextedge[j]){ if(/*kd[to[j]][v]*/bs[to[j]][v]){ ans++; break; } } } printf("%d\n",ans); } }
相关文章推荐
- Mysql笔记——DCL
- hdu5009 Paint Pearls(离散+线性dp)
- Cohen-SutherLand算法(编码算法)
- 图论09——MATLAB自带最短路函数
- ANIS与UNICODE字符格式转换:MultiByteToWideChar()和WideCharToMultiByte()函数介绍
- 黑马程序员_java TreeMap 源代码分析 平衡二叉树
- 不记住密码
- memcached-session-manager配置(tomcat 全局会话共享)
- hdu5413
- (大数据工程师学习路径)第五步 MySQL参考手册中文版----MySQL存储过程
- Mysql笔记——DML
- 修改tableViewCell的默认checkmark颜色 并实现其单选功能
- Mysql笔记——DDL
- Mysql笔记——DDL
- Mysql笔记——DML
- 深入理解Java内存模型之系列篇
- RAD Studio XE8 技术研讨会(上海、成都) - 讲义及范例程序下载
- STM32 CAN
- Solr 搜索的过程和所需要的参数
- 归并排序