九度oj 题目1100:最短路径
- 题目描述:
-
N个城市,标号从0到N-1,M条道路,第K条道路(K从0开始)的长度为2^K,求编号为0的城市到其他城市的最短距离
- 输入:
-
第一行两个正整数N(2<=N<=100)M(M<=500),表示有N个城市,M条道路
接下来M行两个整数,表示相连的两个城市的编号
- 输出:
-
N-1行,表示0号城市到其他城市的最短路,如果无法到达,输出-1,数值太大的以MOD 100000 的结果输出。
- 样例输入:
-
4 4
1 2
2 3
1 3
0 1
- 样例输出:
-
8
9
11
这道题考了最短路径算法和大数运算,好歹做出来了#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <string>
#include <cmath>
#include <algorithm> #define MAX 102
#define TENLEN 200
#define modN 100000
using namespace std; int flag[MAX];
int k2[TENLEN];
int minDis[TENLEN];
int dis[TENLEN]; struct Node
{
int dis[TENLEN];
int zhi;
}; int graph[MAX][MAX];
Node map[MAX][MAX];
Node lowCost[MAX]; void calSum(int sum[], int a[], int b[]) {
int ci = ;
for(int i = ; i < TENLEN;i++) {
int ben = (a[i] + b[i] + ci) % ;
ci = (a[i] + b[i] + ci)/;
sum[i] = ben;
}
} int cmp(int a[], int b[]) {
for(int i = TENLEN-; i >= ; i--) {
if(b[i] > a[i]) {
return -;
}
else if(a[i] > b[i]) {
return ;
}
}
return ;
} int copy(int a[], int b[]) {
for(int i = ; i < TENLEN; i++) {
b[i] = a[i];
}
} void modNprint(int a[]) {
bool isBegin = false;
for(int i = ; i >= ; i--) {
if(!isBegin && a[i] != ) {
isBegin = true;
printf("%d", a[i]);
}
else if(isBegin){
printf("%d", a[i]);
}
}
if(!isBegin) {
printf("");
}
printf("\n");
} void print(int a[]) {
bool isBegin = false;
for(int i = TENLEN - ; i >= ; i--) {
if(!isBegin && a[i] != ) {
isBegin = true;
printf("%d", a[i]);
}
else if(isBegin){
printf("%d", a[i]);
}
}
if(!isBegin) {
printf("");
}
printf("\n");
}
int main(int argc, char const *argv[])
{
int n, m;
//freopen("input.txt","r",stdin);
while(scanf("%d %d",&n,&m) != EOF) {
memset(k2, , sizeof(k2));
k2[] = ;
for(int i = ; i < n; i++) {
for(int j = ; j < n; j++) {
graph[i][j] = ;
}
}
for(int i = ; i < m; i++) {
int atemp, btemp;
scanf("%d %d",&atemp,&btemp);
copy(k2, map[atemp][btemp].dis);
copy(k2, map[btemp][atemp].dis);
graph[atemp][btemp] = ;
graph[btemp][atemp] = ;
calSum(k2, k2, k2);
//print(k2);
} memset(flag, , sizeof(flag));
flag[] = ;
for(int i = ; i < n; i++) {
if(graph[][i] == ) {
copy(map[][i].dis,lowCost[i].dis);
}
} for(int i = ; i < n; i++) {
for(int j = ; j < TENLEN; j++) {
minDis[j] = ;
}
int min = -; for(int j = ; j < n; j++) {
if(flag[j] == && graph[][j] == ) { if(cmp(minDis, lowCost[j].dis) == ) {
copy(lowCost[j].dis,minDis);
//print(minDis);
//print(lowCost[j].dis);
min = j;
}
}
}
//printf("min is %d\n",min);
if(min != -) {
flag[min] = ;
for(int j = ; j < n; j++) {
if(flag[j] == && graph[min][j] == ) {
calSum(dis, lowCost[min].dis, map[min][j].dis);
if(graph[][j] == || cmp(dis,lowCost[j].dis) == -) {
graph[][j] = ;
copy(dis,lowCost[j].dis);
}
} }
}
}
for(int i = ; i < n; i++) {
if(graph[][i] == ) {
modNprint(lowCost[i].dis);
}
else {
puts("-1");
} }
}
return ;
}占用的内存略大,还需要再精简
九度oj 题目1100:最短路径的更多相关文章
- 九度OJ 题目1384:二维数组中的查找
/********************************* * 日期:2013-10-11 * 作者:SJF0115 * 题号: 九度OJ 题目1384:二维数组中的查找 * 来源:http ...
- hdu 1284 关于钱币兑换的一系列问题 九度oj 题目1408:吃豆机器人
钱币兑换问题 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Sub ...
- 九度oj题目&吉大考研11年机试题全解
九度oj题目(吉大考研11年机试题全解) 吉大考研机试2011年题目: 题目一(jobdu1105:字符串的反码). http://ac.jobdu.com/problem.php?pid=11 ...
- 九度oj 题目1007:奥运排序问题
九度oj 题目1007:奥运排序问题 恢复 题目描述: 按要求,给国家进行排名. 输入: 有多组数据. 第一行给出国家数N,要求排名的国家数M,国家号 ...
- 九度oj 题目1087:约数的个数
题目链接:http://ac.jobdu.com/problem.php?pid=1087 题目描述: 输入n个整数,依次输出每个数的约数的个数 输入: 输入的第一行为N,即数组的个数(N<=1 ...
- 九度OJ题目1105:字符串的反码
tips:scanf,cin输入字符串遇到空格就停止,所以想输入一行字符并保留最后的"\0"还是用gets()函数比较好,九度OJ真操蛋,true?没有这个关键字,还是用1吧,还是 ...
- 九度oj题目1009:二叉搜索树
题目描述: 判断两序列是否为同一二叉搜索树序列 输入: 开始一个数n,(1<=n<=20) 表示有n个需要判断,n= 0 的时候输入结束. 接 ...
- 九度oj题目1002:Grading
//不是说C语言就是C++的子集么,为毛printf在九度OJ上不能通过编译,abs还不支持参数为整型的abs()重载 //C++比较正确的做法是#include<cmath.h>,cou ...
- 九度OJ题目1003:A+B
while(cin>>str1>>str2)就行了,多简单,不得不吐槽,九度的OJ真奇葩 题目描述: 给定两个整数A和B,其表示形式是:从个位开始,每三位数用逗号", ...
随机推荐
- mac系统连接Android手机
1. 打开终端,输入:system_profiler SPUSBDataType,查看Mac系统所有USB设备信息,找到相应的厂商Vender ID 2.输入echo "Vender ID& ...
- php通过类名查找这个类所在的路径(即实际引用的是哪个类)
实际上就是应用了类的反射机制 class a{ public $a; protected $b; private $c; } $func = new ReflectionClass('a'); //所 ...
- web前端性能优化 (share)
本文转自:http://www.cnblogs.com/50614090/archive/2011/08/19/2145620.html 一. WEB前台的优化规则 一.尽量减少 HTTP 请求 有几 ...
- django 第一次运行出错
直接运行整个项目正常,直接运行url文件报错 报错内容: E:\Python\python.exe D:/Python储存文件/ceshiweb/ceshiweb/urls.pyTraceback ( ...
- No-11.变量进阶
变量进阶 目标 变量的引用 可变和不可变类型 局部变量和全局变量 01. 变量的引用 变量 和 数据 都是保存在 内存 中的 在 Python 中 函数 的 参数传递 以及 返回值 都是靠 引用 传递 ...
- noip_最后一遍_1-数学部分
它就是要来了 noip数论一般会以三种形式呈现 注 码风可能有些毒 (有人说我压行qwq) 大概保持标准三十五行左右 为什么是三十五行呢 因为我喜欢这个数字 我喜欢三十五而已(足球球衣也会用这个号哒) ...
- 初涉最小表示法&&bzoj1398: Vijos1382寻找主人 Necklace
把最小表示法的坑填了 Description 给定两个项链的表示,判断他们是否可能是一条项链. Input 输入文件只有两行,每行一个由0至9组成的字符串,描述一个项链的表示(保证项链的长度是相等的) ...
- (28)zabbix用户宏变量详解macro
zabbix宏变量让zabbix变得更灵活,变量可以定义在主机.模板以及全局,变量名称类似:{$MACRO},宏变量都是大写的.认识了宏变量,你会感叹zabbix越发的强大. 变量可以用于如下地方: ...
- (24)zabbix触发器表达式详解
概述 触发器中的表达式使用很灵活,我们可以创建一个复杂的逻辑测试监控,触发器表达式形式如下: 1 {<server>:<key>.<function>(< ...
- MariaDB数据库(四)
1. 数据库备份与恢复 数据库备份用命令mysqldump ,MySQL的备份文件一般以.sql结尾,做到见名知意 #备份testdb数据库重定向为testdb.sql文件, [root@localh ...