A1046 Shortest Distance 最短距离
2018-02-28 08:58
218 查看
思路:考虑到题目中的描述是一个无向环,故从一个结点到另一个结点只有两个方向,取其中小的即为最短距离
虽然是图的背景,但根据输入发现并不适合用图的邻接矩阵或邻接表方式。
定义dis[i]表示1号节点到i号节点的下一个节点的距离。dis[0]=0;#include<cstdio>
#include<algorithm>
using namespace std;
const int maxn=100005;
int main()
{
int dis[maxn],A[maxn];
int sum=0;
dis[0]=0;
int n;
scanf("%d",&n);
for(int i=1;i<=n;i++)
{
scanf("%d",&A[i]);
sum+=A[i];
dis[i]=sum;
}
int cnt,left,right;
scanf("%d",&cnt);
for(int i=0;i<cnt;i++)
{
scanf("%d %d",&left,&right);
if(left>right)
swap(left,right);
#include<cstdio>
#include<algorithm>
using namespace std;
const int maxn=100005;
int main()
{
int dis[maxn],A[maxn];
int sum=0;
dis[0]=0;
int n;
scanf("%d",&n);
for(int i=1;i<=n;i++)
{
scanf("%d",&A[i]);
sum+=A[i];
dis[i]=sum;
}
int cnt,left,right;
scanf("%d",&cnt);
for(int i=0;i<cnt;i++)
{
scanf("%d %d",&left,&right);
if(left>right)
swap(left,right);
int temp=dis[right-1]-dis[left-1];
printf("%d\n",min(temp,sum-temp));
}
return 0;
}
printf("%d\n",min(temp,sum-temp));
}
return 0;
}注意:
1,由于V5到V1不好表示,故left>right执行交换操作,确保始终沿着顺时针方向,另一边用sum减即可
2,关键:int temp=dis[right-1]-dis[left-1];
虽然是图的背景,但根据输入发现并不适合用图的邻接矩阵或邻接表方式。
定义dis[i]表示1号节点到i号节点的下一个节点的距离。dis[0]=0;#include<cstdio>
#include<algorithm>
using namespace std;
const int maxn=100005;
int main()
{
int dis[maxn],A[maxn];
int sum=0;
dis[0]=0;
int n;
scanf("%d",&n);
for(int i=1;i<=n;i++)
{
scanf("%d",&A[i]);
sum+=A[i];
dis[i]=sum;
}
int cnt,left,right;
scanf("%d",&cnt);
for(int i=0;i<cnt;i++)
{
scanf("%d %d",&left,&right);
if(left>right)
swap(left,right);
#include<cstdio>
#include<algorithm>
using namespace std;
const int maxn=100005;
int main()
{
int dis[maxn],A[maxn];
int sum=0;
dis[0]=0;
int n;
scanf("%d",&n);
for(int i=1;i<=n;i++)
{
scanf("%d",&A[i]);
sum+=A[i];
dis[i]=sum;
}
int cnt,left,right;
scanf("%d",&cnt);
for(int i=0;i<cnt;i++)
{
scanf("%d %d",&left,&right);
if(left>right)
swap(left,right);
int temp=dis[right-1]-dis[left-1];
printf("%d\n",min(temp,sum-temp));
}
return 0;
}
printf("%d\n",min(temp,sum-temp));
}
return 0;
}注意:
1,由于V5到V1不好表示,故left>right执行交换操作,确保始终沿着顺时针方向,另一边用sum减即可
2,关键:int temp=dis[right-1]-dis[left-1];
相关文章推荐
- Floyd 任意两点间的最短距离 dp
- 关于已知两点经纬度求球面最短距离的公式推导
- 51nod 编辑最短距离
- hdu2586How far away ?【LCA tarjan求最短距离】
- 坐标轴最优点选最短总距离
- UVA 164 String Computer(最短编辑距离)
- HDU 2083简易版之最短距离
- JAVA 后台计算 经纬度 最短距离
- HDOJ 2083 简易版之最短距离
- [LeetCode] 244. Shortest Word Distance II 最短单词距离 II
- POJ 3356 最短编辑距离(动态规划)
- 最短编辑距离-动态规划
- FAFU - 1030 最短距离
- 【杭电oj】2083 - 简易版之最短距离(最短距离)
- hdu 6097 Mindis(圆上一点到圆内(距圆心相等的)两点的距离和最短)
- 点到线段的最短距离
- 三维空间两直线/线段最短距离、线段计算算法
- 动态规划(3)最短编辑距离
- Hdu 2083 简易版之最短距离
- 点到线段的最短距离