07 2013 档案

摘要:找出各个顶点所属的连通分量,将连通分量的点看作一个点,求这些顶点入度为0的个数和出度0的个数,取最大的即可。 1 #include 2 #include 3 #include 4 #include 5 #define maxn 102 6 using namespace std; 7 vector G[maxn],G2[maxn]; 8 vector s;//栈 9 int vis[maxn],10 sccno[maxn], //标记顶点所属的连通分量11 scc_cnt; ... 阅读全文
posted @ 2013-07-30 11:45 SStep 阅读(236) 评论(0) 推荐(0)
摘要:因为每一幢楼都有线连,选择最小与外界供电设施所需要的费用最小的楼做外连。这个楼也是做为其他楼的根节点。 #include#includeusing namespace std;#define M 125000int u[M],v[M],w[M],r[M],p[502];int cmp(const int i,const int j)//间接排序{ return w[i] < w[j]; }int find(int x){ return p[x] == x ? x : p[x]=find(p[x]); }int main(){ int i,m,k,x,y,ans,t,n,e; //f... 阅读全文
posted @ 2013-07-29 09:06 SStep 阅读(195) 评论(0) 推荐(0)
摘要:旋转操作不影响中序遍历。只要把树存起来再中序遍历即可。 1 2 #include 3 using namespace std; 4 struct node{ 5 int L; 6 int R; 7 }Tree[11]; 8 void InorderTraverse(int root) 9 {10 if(Tree[root].L != -1)InorderTraverse(Tree[root].L);11 cout>T;19 while(T--)20 {21 cin>>N;22 for(i=0; i>root>>... 阅读全文
posted @ 2013-07-26 20:50 SStep 阅读(183) 评论(0) 推荐(0)
摘要:建图(蛇形填数)+求素数+bfs。注意:数据可以是素数。当起点与终点不同时,终点为素数时,结果就是impossible,起点与终点相同时,结果都是0. 1 #include 2 #include 3 int vis[101][101],bfs[10010]; 4 int dx[4]={0,0,1,-1},dy[4]={1,-1,0,0}; 5 int A[101][101]; 6 int prim[10002]={0}; 7 void prime() 8 { 9 int i,j;10 memset(prim,0,sizeof(prim));11 prim[1] = 1;... 阅读全文
posted @ 2013-07-26 16:31 SStep 阅读(204) 评论(0) 推荐(0)
摘要:士兵杀敌(五)时间限制:2000 ms | 内存限制:65535 KB输入只有一组测试数据第一行是三个整数N,C,Q(1 2 #define Max 1000005 3 int a[Max]; 4 int main() 5 { 6 //freopen("in.txt","r",stdin); 7 int i,N,C,Q,L,R,D; 8 9 scanf("%d%d%d",&N,&C,&Q);10 for(i=0; i<C; i++)11 {12 scanf("%d%d%d",& 阅读全文
posted @ 2013-07-19 10:31 SStep 阅读(204) 评论(0) 推荐(0)
摘要:和树状数组插点求线刚好相反,插线求点看上去似乎是插点求线的逆操作,插点求线操作是:插点时更新后方+lowbit位置,求线时统计前方-lowbit 的和,插线求点反而是插线时修改前方lowbit位置值,求点时统计后方lowbit的和,插点求线代码见士兵杀敌(二),以下是插线求点的方法: 1 #include 2 #include 3 const int M=1000010; 4 int data[M]; 5 int Max; 6 inline int LowBit(int n) 7 { 8 return n&(-n); 9 }10 void Plus(int n,int value) / 阅读全文
posted @ 2013-07-18 20:54 SStep 阅读(245) 评论(0) 推荐(0)
摘要:题目连接:http://acm.nyist.net/JudgeOnline/problem.php?pid=634分别从两个数组中各任取一个数相加,可以得到n^2个和,求这些和中最大的前m个数;我们把这n^2个和组织成如下n个有序表:表1:A1+B1 >= A1+B2 >= A1+B3 >= ...... 阅读全文
posted @ 2013-07-18 16:21 SStep 阅读(313) 评论(0) 推荐(0)
摘要:RMQ问题,即范围最小值问题(Range Minimum Query)ST表【任务】给定一个数组A[n],设计一个数据结构,支持查询操作Query(L,R):计算min{AL,AL+1,...AR}或者max{AL,AL+1,...AR} 1 #include 2 #include 3 using namespace std; 4 #define MAX 180012 5 int A[MAX][17],B[MAX][17]; 6 7 int RMQ(int L,int R) 8 { 9 int k = 0;10 while((1<<(k+1)) <= R-L+1) k++;1 阅读全文
posted @ 2013-07-18 15:25 SStep 阅读(229) 评论(0) 推荐(0)
摘要:二叉索引数(树状数组)【任务】对于数组A[1..n],在O(logn)的时间内完成以下任务:(1) Add(x,d):让A[x]增加 d;(2) Query(L,R):计算A[L]+...+A[R]的和;(这题可作为树状数组的模板) 1 #include 2 #define Max 1000005 3 int C[Max]; 4 int N,M; 5 int lowbit(int x) 6 { 7 return x & -x; 8 } 9 int sum(int i)//计算前i项和10 {11 int ret = 0;12 while(i>0)13 {14 ... 阅读全文
posted @ 2013-07-18 11:38 SStep 阅读(262) 评论(0) 推荐(0)