上一页 1 ··· 43 44 45 46 47 48 49 50 51 ··· 57 下一页

2011年7月17日

并查集

摘要: #include <iostream> //并查集 poj 2524 Ubiquitous Religionsusing namespace std;int par[50010],ans[50010],n,m;void init(){ for(int i=1;i<=n;++i) { par[i]=i; ans[i]=0; }}int find_p(int i)//路径压缩,即当我们经过"递归"找到祖先节点后,"回溯"的时候顺便将它的子孙节点都直接指向祖先,//这样以后再次Find_Set(x)时复杂度就变成O(1)了{ if(par[i 阅读全文

posted @ 2011-07-17 01:32 sysu_mjc 阅读(125) 评论(0) 推荐(0) 编辑

Bellman-Ford算法之三

摘要: //poj 2240 Arbitrage#include <iostream> //Bellman-Ford算法的变形#include<string>using namespace std;const int maxnum = 32;typedef struct Edge{ int u, v; double rate; }Edge;Edge edge[100000]; double dist[maxnum]; int nodenum, edgenum; string table[32];void input(){ string str,str1,str2; int i, 阅读全文

posted @ 2011-07-17 01:23 sysu_mjc 阅读(155) 评论(0) 推荐(0) 编辑

Bellman-Ford算法之二

摘要: //poj 3259 Wormholes,源点不明确//与spfa算法不同,当源点不明确时,bellman_ford算法不用添加超源点,//因为它对图中每一条边都为做n-1次松弛,就保证每个顶点都得到更新。//Bellman-Ford算法,求负权回路//John的农场里field块地,path条路连接两块地,是双向边,hole个虫洞,虫洞是一条单向路,不但会把你传送到目的地,而且时间会倒退Ts。//我们的任务是知道会不会在从某块地出发后又回来,看到了离开之前的自己,即是求是否存在负权回路#include <iostream> using namespace std;const in 阅读全文

posted @ 2011-07-17 01:22 sysu_mjc 阅读(173) 评论(0) 推荐(0) 编辑

2011年7月16日

sicily 1282. Computer Game

摘要: // 题意: A是主串,B是子串,都由数字组成, 查询B串在A串第一次出现的位置,若找不到则输出no solution// 注意子串的最大长度是60000,但主串的长度未知,所以要开大些#include <iostream> //KMP算法#include<stdio.h>using namespace std;int A[1000000],B[80000]; //A是主串,B是子串,查询B串在A串的哪些地方出现int n,m,next[80000]; //n,m分别是A,B的串长度,A,B的下标是从1开始的void get_next(){ next[1... 阅读全文

posted @ 2011-07-16 21:34 sysu_mjc 阅读(710) 评论(2) 推荐(0) 编辑

sicily 1823. Hardest Job Ever!

摘要: #include <iostream> //求顶点1到n的最短距离,Dijkstra算法#include<stdio.h>using namespace std;#define Max 210#define MaxW 20000int n,m,edge[Max][Max],S[Max],distD[Max];void Dijkstra(int v) { for(int i=0;i<n;++i) { distD[i]=edge[v][i]; S[i]=0; } S[v]=1; for(int i=1;i<n;++i) { int min=MaxW,u=0; f 阅读全文

posted @ 2011-07-16 21:06 sysu_mjc 阅读(206) 评论(0) 推荐(0) 编辑

sicily 1350. Piggy banks

摘要: #include<iostream> //给出每个点入度为1的有向图,求环的个数#include<stdio.h>using namespace std;#define M 1000005int par[M],vis[M],path[M],circle[M];int main(){ int n; while(scanf("%d",&n)!=EOF) { for(int i=1;i<=n;++i) scanf("%d",&par[i]); for(int i=1;i<=n;++i) { vis[i]=0; 阅读全文

posted @ 2011-07-16 20:36 sysu_mjc 阅读(221) 评论(0) 推荐(0) 编辑

sicily 1166. Computer Transformat

摘要: #include<iostream> //DP+高精度#include <string>using namespace std;int compare(string str1, string str2){ while(!str1.empty()&&str1[0]=='0') { str1.erase(0,1); } while(!str2.empty()&&str2[0]=='0') { str2.erase(0,1); } if(str1.size() > str2.size()) //长度长的整数 阅读全文

posted @ 2011-07-16 15:08 sysu_mjc 阅读(210) 评论(0) 推荐(0) 编辑

sicily 1197. Hotel

摘要: // 题意:给出一个元字符串goal,里面含有特别字符*和?,其中*代表任意多个字符,?代表一个字符,// 有n个字符串str,问哪些字符串与元字符串相匹配#include<iostream> //含通用符的字符串的最长匹配#include<stdio.h>#include<cstring>using namespace std;char goal[60],str[60];int f[60][60]; //f[i][j]=1,表示一个字符串的0-i子串与另一个字符串的0-j子串匹配,f[i][j]=0则是不匹配int dp(int i,int j) /... 阅读全文

posted @ 2011-07-16 11:08 sysu_mjc 阅读(208) 评论(0) 推荐(0) 编辑

2011年7月15日

sicily 1363. Semi-prime H-numbers

摘要: #include <iostream> //线性筛+树状数组#include<stdio.h>using namespace std;#define Max 1000010int n,table[Max],vis[Max],prime[80000];int lowbit(int x){ return x&(-x);}void modify(int x){ if(vis[x]==0) { vis[x]=1; while(x<Max) { table[x]++; x+=lowbit(x); } }}int getsum(int x){ int s=0; whi 阅读全文

posted @ 2011-07-15 15:59 sysu_mjc 阅读(166) 评论(0) 推荐(0) 编辑

sicily 1158. Pick numbers

摘要: // 题意: M*N矩阵,从[1,1]出发,只能向下或向右走,求出到[M,N]的最小非负长度#include<iostream>using namespace std;int m,n,table[12][12],res;void dfs(int sum,int x,int y){ sum+=table[x][y]; if(x==m&&y==n&&sum>0) { if(res==-1) res=sum; else res=min(res,sum); } if(x<m) d... 阅读全文

posted @ 2011-07-15 14:45 sysu_mjc 阅读(236) 评论(0) 推荐(0) 编辑

上一页 1 ··· 43 44 45 46 47 48 49 50 51 ··· 57 下一页

导航