上一页 1 ··· 19 20 21 22 23 24 25 26 27 ··· 30 下一页
摘要: 题意:给出源点和边,边权为1,让你求从源点出发的最长路径,求出路径长度和最后地点,若有多组,输出具有最小编号的最后地点。#include #include #include #include #include using namespace std;const int maxn=110;int n,s,tot; //n:点的个数,s:源点int dist[maxn]; //存储该点到源点的最长路径int head[maxn];int vis[maxn]; //用来在SPFA算法中标记点是否在队列中struct Edge{ int to,next;}edge[5050];void add(... 阅读全文
posted @ 2013-10-23 09:23 辰曦~文若 阅读(420) 评论(0) 推荐(0)
摘要: 题意:给你n个城市,一些城市之间会有一些道路,有边权。并且每个城市都会有一些费用。 然后你一些起点和终点,问你从起点到终点最少需要多少路途。 除了起点和终点,最短路的图中的每个城市的费用都要加上。思路一:因为有多组数据,所以可以采用弗洛伊德算法求多源最短路。 但是,这里要求输出的路径,且按字典序输出。 这里可以用一个数组:pre[i][j]表示i到j的路径上的首个付费城市。这是最关键的地方。 要注意:输出时候,如果起点和终点相同。只输出i,没有箭头。#include #include #include #include using namespace std;const int max... 阅读全文
posted @ 2013-10-22 08:16 辰曦~文若 阅读(328) 评论(0) 推荐(0)
摘要: 题意:有两只青蛙,a在第一个石头,b在第二个石头,a要到b那里去,每种a到b的路径中都有最大边,求所有这些最大边的最小值。思路:将所有边长存起来,排好序后,二分枚举答案。 时间复杂度比较高,344ms。#include #include #include #include #include using namespace std;const int maxn=210;const int INF=0x3f3f3f3f;double w[maxn][maxn]; //存储边长double wlen[30000];int con[maxn][maxn]; //con[i][j]=1表示i、j连通,. 阅读全文
posted @ 2013-10-17 15:22 辰曦~文若 阅读(321) 评论(0) 推荐(0)
摘要: 用的是prim算法。我用vector数组,每次求最小的dis时,不需要遍历所有的点,只需要遍历之前加入到vector数组中的点(即dis[v]!=INF的点)。但其实时间也差不多,和遍历所有的点的方法都是16ms。。。#include #include #include #include #include #include using namespace std;const int INF=0x3f3f3f3f;int n,cost;int ans;int w[101][101];int dis[101]; //生成树外的点与生成树相连的最短边长int pre[101]; //pre[v]为v 阅读全文
posted @ 2013-10-17 09:43 辰曦~文若 阅读(230) 评论(0) 推荐(0)
摘要: 题意:给出邻接矩阵,在给出q条已经建好的路,让你再建一些路,使得连通所有的村庄并且兴建的路的长度时最小的。思路:1.可以先将建好的路的端点合并,这里要注意的是,首先先要判断两个端点u、v的根节点是否相同,不同的话在合并。是为了防止有重复或者有环出现。 2.可以将建好的路的cost设为0,再直接用kruskal算法。由于建边的时候是用了上三角矩阵,所以很容易用端点u、v来推出相应边的编号。代码1:#include #include #include #include #include using namespace std;int n,q,cost,index,a,b;int ans;struc 阅读全文
posted @ 2013-10-17 09:01 辰曦~文若 阅读(213) 评论(0) 推荐(0)
摘要: 题意:给出n个字符,m对关系,让你输出三种情况: 1.若到第k行时,能判断出唯一的拓扑序列,则输出: Sorted sequence determined after k relations: 序列 2.若到第k行,出现环,则输出: Inconsistency found after k relations. 3.若直到m行后,仍判断不出唯一的拓扑序列,则输出: Sorted sequence cannot be determined.思路:每读取一行,就进行一次拓扑排序,为防止影响之后的拓扑排序,拓扑排序时用的入度数组为into2。 如果拓扑排序能得出唯一的序列,即为第一种情况,之后只要直接 阅读全文
posted @ 2013-10-15 20:42 辰曦~文若 阅读(699) 评论(0) 推荐(0)
摘要: 题意:每组数据给出两行,第一行给出变量,第二行给出约束关系,每个约束包含两个变量x,y,表示x#include #include #include #include using namespace std;int node[30],num; //num为变量的个数,node存储变量对应的整型值int edge[30][30]; //edge[i][j]=1表示i<j。int into[30]; //表示i的入度//u表示此次选的是第u个变量,idx表示目前选了idx个变了,s是输出的结果字符串void topo_dfs(int u,int idx,string s){ if(u!... 阅读全文
posted @ 2013-10-13 10:30 辰曦~文若 阅读(284) 评论(0) 推荐(0)
摘要: 题意:从左下方1开始,一笔画出圣诞老人的屋子(不过话说,圣诞老人的屋子是这样的吗?这算是个屋子么),输出所有可以的路径。思路:贴代码。#include #include #include #include #include using namespace std;int head[20],tot=0,val;//val:用整型值存储结果,因为最后输出是要按大小排序int vis[20];//用来标记边是否已经走过,若已经走过,则接下来就不能走该条边int len;//满足一笔画的答案个数int ans[510];//存储答案struct Edge{ int to,next;}edge[2... 阅读全文
posted @ 2013-10-12 16:09 辰曦~文若 阅读(437) 评论(0) 推荐(0)
摘要: 题意:给出两个四位数的素数,按如下规则变换,使得将第一位数变换成第二位数的花费最少,输出最少值,否则输出0。 每次只能变换四位数的其中一位数,使得变换后的数也为素数,每次变换都需要1英镑(即使换上的数是以前被换下的)。思路:若素数a可以按上述规则转化为b,则可以看做a、b直接有一条边。显然,从初始值到目标值的路径上的边数即为花费的 数目,这样一来,就相当于求最短路径。由于题目只要求最小花费数,所以不需要存储有向图。 用BFS搜索,每次枚举当前值x所能变换得到的值y,若y满足条件,将y以及从初始值达到当前y值所需要的次数压入队列。 只要当从队列取出的数值等于目标值,此时的花费即... 阅读全文
posted @ 2013-10-11 20:30 辰曦~文若 阅读(265) 评论(0) 推荐(0)
摘要: 题意:在树中,每次删去节点值最小的叶子结点。 每删去一个点,就给出与这相连的点的值,直到最后只剩下一个根结点,给这N-1个数,重新建立这个树。思路: 给出的节点号按次序存入到数组a中,将未给出的数存入到rest数组中去,并从小到大排序。 每次取一个给出的节点,那么我们需要求出与该点相连的被删去的点v。 而点v必定为 “不会在之后的数据中出现的值(即之后删除的叶子节点中再也没有与之相连的,即改点为叶子节点)”和 “当前rest数组中最小的值” 中的最小值。 那么只要预处理一下,对于给出的节点号u,num[u][i]表示在给出的n-1个节点号(标号为0~n-2)中,第i个以后(包... 阅读全文
posted @ 2013-10-07 17:46 辰曦~文若 阅读(472) 评论(0) 推荐(0)
上一页 1 ··· 19 20 21 22 23 24 25 26 27 ··· 30 下一页