写2个dijkstra,一个逆向一个顺向View Code #include<stdio.h>#include<string.h>#define maxn 1001#define INF 100000000int dis[maxn],adj[maxn][maxn],d[maxn];bool vis[maxn];int m, n;void dijkstra(int v) //顺向{ int i ,j ,k, u, min; for(i=0;i<=n;i++) { dis[i]=adj[v][i]; vis[i]=0; } vis[... Read More
posted @ 2012-07-24 18:17 To be an ACMan Views(197) Comments(0) Diggs(0)
dijkstra略微做下修改View Code #include<stdio.h>#include<string.h>#define maxn 1001#define INF 100000000int MIN(int a, int b){ return a < b ? a : b;}int dis[maxn],adj[maxn][maxn];bool vis[maxn];int n, m;void dijkstra(int v){ int i, j, k, u, max; for(i=1;i<=n;i++) { dis[i]=adj[v][i]; ... Read More
posted @ 2012-07-23 23:32 To be an ACMan Views(175) Comments(0) Diggs(0)
水题一枚数据规模不是很大,可以用floyd暴力过View Code #include<stdio.h>#include<string.h>#define INF 30#define maxn 101int dis[maxn][maxn];int n, m;void floyd(){ int i, j, k; for(k=1;k<=n;k++) for(i=1;i<=n;i++) for(j=1;j<=n;j++) if(k!=i&&k!=j) if(dis[i][k]+dis[k... Read More
posted @ 2012-07-23 22:58 To be an ACMan Views(182) Comments(0) Diggs(0)
HDU 1874 畅通工程续水dijkstraView Code #include<stdio.h>#include<string.h>#define INF 1000000#define maxn 201int adj[maxn][maxn],dis[maxn];//pre[maxn]bool vis[maxn];int n ,m;int dijkstra(int src, int dest){ int i ,j, k, u, min; for(i=0;i<n;i++) { vis[i]=0; dis[i]=adj[src][i]; ... Read More
posted @ 2012-07-23 22:26 To be an ACMan Views(583) Comments(0) Diggs(0)
题意:求源点1到其它任意点的最小值 之中的最大值。题意理解后,dijkstra水题View Code #include<stdio.h>#include<string.h>#define maxn 101#define INF 100000000int n, m;int adj[maxn][maxn],dis[maxn];int max;bool vis[maxn];int dijkstra(int v){ int i,j,k,min,u; for(i=1;i<=n;i++) { dis[i]=adj[v][i]; vis[i]=0; } ... Read More
posted @ 2012-07-23 21:37 To be an ACMan Views(169) Comments(0) Diggs(0)
典型的水floydView Code #include<stdio.h>#include<algorithm>#include<string.h>using namespace std;#define INF 1000000#define maxn 1001int adj[maxn][maxn],dis[maxn][maxn],pos[maxn];int n, m, num;void floyd(){ int i ,j ,k; for(i=1;i<=n;i++) for(j=1;j<=n;j++) dis[i][j]=adj[i][j]; ... Read More
posted @ 2012-07-22 22:18 To be an ACMan Views(368) Comments(0) Diggs(0)
最朴素最短路适用条件:边权必须为非负;以HDU2544为例View Code #include<stdio.h>#include<string.h>#define INF 100000000#define maxn 1001bool vis[maxn];int adj[maxn][maxn],dis[maxn],pre[maxn];//pre[]记录前驱int n, m;void dijkstra(int v){ int i, j, u , min; for(i=0;i<=n;i++) { dis[i]=adj[v][i]; vis[i]=0; ... Read More
posted @ 2012-07-18 20:19 To be an ACMan Views(3561) Comments(0) Diggs(0)
C语言位运算详解位运算是指按二进制进行的运算。在系统软件中,常常需要处理二进制位的问题。C语言提供了6个位操作运算符。这些运算符只能用于整型操作数,即只能用于带符号或无符号的char,short,int与long类型。C语言提供的位运算符列表:运算符含义描述& 按位与 如果两个相应的二进制位都为1,则该位的结果值为1,否则为0| 按位或 两个相应的二进制位中只要有一个为1,该位的结果值为1^ 按位异或 若参加运算的两个二进制位值相同则为0,否则为1~ 取反 ~是一元运算符,用来对一个二进制数按位取反,即将0变1,将1变0<< 左移 用来将一个数的各二进制位全部左移N位,右补 Read More
posted @ 2012-07-11 19:48 To be an ACMan Views(287) Comments(0) Diggs(0)
题意:在墙上贴海报,海报可以互相覆盖,问最后可以看见几张海报思路:这题数据范围很大,直接搞超时+超内存,需要离散化:离散化简单的来说就是只取我们需要的值来用,比如说区间[1000,2000],[1990,2012] 我们用不到[-∞,999][1001,1989][1991,1999][2001,2011][2013,+∞]这些值,所以我只需要1000,1990,2000,2012就够了,将其分别映射到0,1,2,3,在于复杂度就大大的降下来了所以离散化要保存所有需要用到的值,排序后,分别映射到1~n,这样复杂度就会小很多很多而这题的难点在于每个数字其实表示的是一个单位长度(并非一个点),这样 Read More
posted @ 2012-07-11 19:26 To be an ACMan Views(144) Comments(0) Diggs(0)
POJ2828 Buy Tickets题意:插队问题;关键:如何插入这几个节点,每个节点储存什么信息。类型:很基本的单点更新线段树思路:这题想到了就水了,数据逆着插入,最先插入的一个数据的位置明显是题目给定的位置,可以确定,然后插入的几个数根据的位置前面插入的数据来决定,用sum[]数组表示改线段空位置的个数,满足 pos<=sum[rt<<1](即左儿子的空位多于插入数的位置序号)就访问左儿子,否则访问右儿子(访问右节点的时候注意pos要修改,改为pos-sum[rt],即整个线段的第pos个空位,在下一个右儿子那的第pos-sum[rt]个空位)。对自己的总结: 刚学线段 Read More
posted @ 2012-07-11 18:29 To be an ACMan Views(3623) Comments(0) Diggs(1)