摘要: http://poj.org/problem?id=3249题意:给出一个有向图图 每点有一个权值 全职有正有负 找从任意一点出发的总权值最大的路径 输出其最大值用spfa 。。 初始把入度为0的点加入队列 因为数值很大 所以要用到longlong 型注意 最后输出maxx 也要是longlong型 一开始没注意到这个 wa很久 搞得人都要抓狂了#include#include#include#include#define INF 1000000000using namespace std;struct E {int to;int next;}edge[2000002];int w[10001 阅读全文
posted @ 2013-08-05 11:58 galaxy77 阅读(235) 评论(0) 推荐(0) 编辑
摘要: http://poj.org/problem?id=2553#include#include//#include#include#includeusing namespace std;//vector g[1002];struct E{int to;int next;} edge[20000000];int pre[5002],low[5002],lt_num,c,scc_num[5002],scc,out0[5002],n,adj[5002],num,flag;stack s;void add(int a,int b){ edge[num].to=b; edge[num].ne... 阅读全文
posted @ 2013-08-05 11:48 galaxy77 阅读(164) 评论(0) 推荐(0) 编辑
摘要: 一开始 自己写了个记忆化搜索的代码 结果总是RE 检查了n遍 数组也没开小 估计是 爆栈了 于是我把代码改成了非递归形式的代码里还用到了队列写着写着发现我写的和spfa的思路是一样的嘛 不过还是超时了 又检查了n遍发现 我把结束的条件看错了 = = |||好吧 再改改完后还是wa !!!啊~~妹的又是 一阵检查 原来 他讲的是绝对值> 0 (>o#include#include#define INF 1000000000using namespace std;struct E {int to;int next;}edge[2000002];int w[100012],adj[100 阅读全文
posted @ 2013-08-02 17:24 galaxy77 阅读(304) 评论(0) 推荐(0) 编辑
摘要: http://poj.org/problem?id=1236#include#include#include#include#includeusing namespace std;vector g[1002];int pre[1002],low[1002],lt_num,c,scc_num[1002],scc,in0[1002],out0[1002],n,a,b;stack s;void dfs(int u){ int i,v; pre[u]=low[u]=c++; s.push (u); for(i=0;ib?a:b;}int main(){ int i,q;... 阅读全文
posted @ 2013-08-01 22:09 galaxy77 阅读(250) 评论(0) 推荐(0) 编辑
摘要: http://poj.org/problem?id=3463题意 给出一个图 若次短路比最短路多1 则输出 最短路的条数+次短路的条数否则输出 最短路的条数#include#include#include#includeusing namespace std;#define INF 100000000struct E{int to;int next;int len;}edge[20004];int vis[1014][2],d[1012][2],dp[1012][2],adj[1002],num;void dij(int s,int n){ int i,j,flag; memset... 阅读全文
posted @ 2013-07-31 19:19 galaxy77 阅读(320) 评论(0) 推荐(0) 编辑
摘要: http://poj.org/problem?id=3013求最短路n#include#include#includeusing namespace std;//#define INF 20000000000const long long INF=(long long) 1 q;void add(int a,int b,int c){ edge[num].to =b; edge[num].next=adj[a]; edge[num].len =c; adj[a]=num++;}void spfa(int s,int n){ int i,a,b; for(i=... 阅读全文
posted @ 2013-07-31 11:08 galaxy77 阅读(238) 评论(0) 推荐(0) 编辑
摘要: http://poj.org/problem?id=1679题意 给出一个图 找出其最小生成树 若有多颗值一样的最小生成树 则输出 -1 若图不连通 则输出 0先判断 图是否连通 若连通则 一定可以找到有n-1条边的 最小生成树用克鲁斯卡尔 算法找最小生成树当找到第n-1 条时记下第n-1条边的权值 若后面有两端点在不同连通分量中 且其权值和前面记下的一样则 有多颗一样的#include#include#include#include#includeusing namespace std;struct E{ friend bool operator n2.w; } int u... 阅读全文
posted @ 2013-07-30 23:14 galaxy77 阅读(212) 评论(0) 推荐(0) 编辑
摘要: 给出一个图 图中每段路都有个载重量 一条路径的总载重量为奇各段路中 载重量最小的值 找从1到n的各路径中总载重量最大的d[i] 为从起点到 点i 的路径中 总载重量最大的只要将spfa 松弛的条件改一下 就好了if(d[b]#include#include#include#define INF 100000000using namespace std;vector g[2002],w[2002];int vis[2002],d[2002];int min(int a,int b){ return a q; memset(vis,0,sizeof(vis)); memset(... 阅读全文
posted @ 2013-07-29 11:04 galaxy77 阅读(275) 评论(0) 推荐(0) 编辑
摘要: http://acm.hdu.edu.cn/showproblem.php?pid=2680#include#include#include#includeusing namespace std;#define INF 100000000vector g[1002];int w[1002][1002],d[1002],vis[1002];struct edge{int u;int v;}e[100000];void spfa(int a,int n){ queue q; memset(vis,0,sizeof(vis));//不在队列中 for(int i=2;id[a]+w... 阅读全文
posted @ 2013-07-28 22:00 galaxy77 阅读(216) 评论(0) 推荐(0) 编辑
摘要: #include#include#define INF 1000000000using namespace std;int g[202][202],d[202],vis[202];int main(){ int i,j,m,n,a,b,c; while(scanf("%d%d",&n,&m)!=EOF) { memset(g,0,sizeof(g)); for(i=0;id[j]) { minn=d[j]; x=j; } vis[x]=1; for(j=0;j... 阅读全文
posted @ 2013-07-28 21:37 galaxy77 阅读(175) 评论(0) 推荐(0) 编辑