【dfs or 最短路】【HDU1224】【Free DIY Tour】
路径只能由小序号到大序号..(起点可以视为最小的序号和最大的序号) 问怎么走 happy值最大..
DFS
N=100 且只能小序号到大序号 显然dfs可以过..
但是存路径的时候sb了.....应该在更新答案时拿一个ans_dis数组去全部存一遍路径...
#include <cstdio>
#include <cstdlib>
#include <cmath>
#include <cstring>
#include <ctime>
#include <algorithm>
#include <iostream>
#include <sstream>
#include <string>
#define oo 0x13131313
using namespace std;
const int maxn=105;
const int inf=-0x3f3f3f3f;
int w[maxn];
int dis[maxn];
struct edge
{
int to;
edge *next;
}E[maxn*maxn],*EE;
struct node
{
edge *frist;
}Graph[maxn];
int N,M;
int pre[maxn];
void Link(int u,int v)
{
EE->to=v;EE->next=Graph[u].frist;Graph[u].frist=EE++;
// EE->to=u;EE->next=Graph[v].frist;Graph[v].frist=EE++;
}
void input()
{
cin>>N;
memset(Graph,0,sizeof(Graph));
memset(pre,0,sizeof(pre));
memset(dis,0,sizeof(dis));
EE=E;
for(int i=1;i<=N;i++)
{
scanf("%d",&w[i]);
}
cin>>M;
int a,b;
for(int i=1;i<=M;i++)
{
scanf("%d%d",&a,&b);
if(b==N+1) b=1;
if(a==N+1) a=1;
Link(a,b);
}
}
int ans=-1;
int dfs(int P,int n,int ok,int W)
{
pre[n]=P;
if(ok==1&&n==1)
{
if(W>ans)
{
int p=pre[n];
dis[n]=pre[n];
while(p!=1)
{dis[p]=pre[p];p=pre[p];}
ans=W;
}
return 0;
}
else
{ for(edge *p=Graph[n].frist;p;p=p->next)
{
if(p->to>n||p->to==1){dfs(n,p->to,1,W+w[n]);}
}
}
}
void output(int n,int ok)
{
if(n==1&&ok==1)
{
printf("%d",n);
}
else {
output(dis[n],1);
printf("->%d",n);
}
}
int CASE=0;
int T;
void solve()
{
ans=inf;
dfs(0,1,0,0);
printf("%d\n",ans);
printf("circuit : ");
output(1,0);
printf("\n");
if(T!=0) printf("\n");
}
void init()
{
freopen("a.in","r",stdin);
freopen("a.out","w",stdout);
} int main()
{
// init(); cin>>T;
while(T--)
{
printf("CASE %d#\n",++CASE);
printf("points : ");
input();
solve();
}
return 0;
}
最短路
Floyd
利用floyd..在循环的时候修改一下循环次数即可
#include <cstdio>
#include <cstdlib>
#include <cmath>
#include <cstring>
#include <ctime>
#include <algorithm>
#include <iostream>
#include <sstream>
#include <string>
#define oo 0x13131313
using namespace std;
const int maxn=105;
const int inf=-0x3f3f3f3f;
int T;
int N,M;
int w[maxn];
int MAP[maxn][maxn];
int F[maxn][maxn];
int dis[maxn][maxn];
void input()
{
memset(MAP,0,sizeof(MAP));
memset(dis,0,sizeof(dis));
int a,b;
cin>>N;
for(int i=1;i<=N;i++)
{
scanf("%d",&w[i]);
w[i]=-w[i];
}
w[N+1]=0;
cin>>M;
for(int i=1;i<=M;i++)
{
scanf("%d%d",&a,&b);
MAP[a][b]=1;
}
for(int i=0;i<maxn;i++)
for(int j=0;j<maxn;j++)
{
F[i][j]=-inf;
if(MAP[i][j]==1)
F[i][j]=0;
}
}
void floyed()
{
for(int i=1;i<=N+1;i++)
for(int j=1;j<=N+1;j++)
dis[i][j]=j;
for(int k=1;k<=N+1;k++)
for(int i=1;i<k;i++)
for(int j=k+1;j<=N+1;j++)
{
if(F[i][k]+F[k][j]+w[k]<F[i][j])
{
F[i][j]=F[i][k]+F[k][j]+w[k];
dis[i][j]=dis[i][k];
}
}
printf("points : %d\n",-F[1][N+1]);
printf("circuit : ");
for(int p=1;1;p=dis[p][N+1])
{
if(p==N+1){printf("1");break;}
else{
printf("%d->",p);
}
}
printf("\n");
if(T!=0) printf("\n"); }
void init()
{
freopen("a.in","r",stdin);
freopen("a.out","w",stdout);
}
int main()
{
int CASE=0;
// init();
cin>>T;
while(T--)
{
printf("CASE %d#\n",++CASE); input();
floyed();
}
}
【dfs or 最短路】【HDU1224】【Free DIY Tour】的更多相关文章
- HDU ACM 1224 Free DIY Tour (SPFA)
Free DIY Tour Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Tot ...
- HDU 1224 Free DIY Tour(spfa求最长路+路径输出)
传送门: http://acm.hdu.edu.cn/showproblem.php?pid=1224 Free DIY Tour Time Limit: 2000/1000 MS (Java/Oth ...
- 动态规划:HDU1224-Free DIY Tour
Free DIY Tour Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) ...
- Free DIY Tour HDU1224
一道很好的dfs加储存路径的题目 :路径保存:每次dfs都存i 当大于max时 将临时数组保存到答案数组 并不是当 当前值大于最大值时更新路径 还要加上一个条件:能回去 #include<bi ...
- HDU 1224 Free DIY Tour - 最短路
传送门 题目大意: 一个有向图(n + 1相当于1),每个点有一个权值(可以认为1和n+1权值为0),求从1走到n+1(相当于走回1)的最大路径权值和是多少,输出方案. 题目分析: 最短路问题,输出方 ...
- F - Free DIY Tour(动态规划,搜索也行)
这道题可用动态规划也可以用搜索,下面都写一下 Description Weiwei is a software engineer of ShiningSoft. He has just excelle ...
- pat1003 迪杰斯特拉法和dfs求最短路
本题的背景是求定点和定点之间的最短路问题(所有的最短路 不是一个解 是全部解,方法手段来自数据结构课程中的迪杰斯特拉算法和dfs(深度优先遍历). 分别用两种方法编程如下代码 dfs #includ ...
- HDU1224-Free DIY Tour(SPFA+路径还原)
Weiwei is a software engineer of ShiningSoft. He has just excellently fulfilled a software project w ...
- A - Free DIY Tour HDU - 1224
题目大意:每一个城市都有一定的魅力值,然后有一个有向图,根据这个有向图从1到n+1所获得的魅力的最大值,并输出路径(要求只能从编号娇小的城市到编号较大的城市). 题解:很容易想到最短路+路径纪录.但是 ...
随机推荐
- hdu 4750 Count The Pairs(并查集+二分)
Problem Description With the 60th anniversary celebration of Nanjing University of Science and Techn ...
- Android系统Surface机制的SurfaceFlinger服务简要介绍和学习计划
文章转载至CSDN社区罗升阳的安卓之旅,原文地址:http://blog.csdn.net/luoshengyang/article/details/8010977 前面我们从Android应用程序与 ...
- Vlc基础数据结构记录
1. Vlc基础数据结构 hongxianzhao@hotmail.com 1.1 基础数据结构 struct vlc_object_t,相关文件为src\misc\objects.c. 定义为: ...
- jquery $(function) 区别
document.ready和onload的区别——JavaScript文档加载完成事件 页面加载完成有两种事件 一是ready,表示文档结构已经加载完成(不包含图片等非文字媒体文件) 二是onloa ...
- ARCGIS接口详细说明
ArcGIS接口详细说明 目录 ArcGIS接口详细说明... 1 1. IField接口(esriGeoDatabase)... 2 2. IFieldEdit接口(esriGe ...
- sql server的两个类型转换函数
今天遇到一个sql的问题,条件中有个去当前月第一天(2013-8-23 0:00:00),很简单CAST(DATEADD(dd,-DAY(GETDATE())+1,GETDATE()) AS DATE ...
- CAShapeLayer + UIBezierPath
UIBezierPath: UIBezierPath是在 UIKit 中的一个类,继承于NSObject,可以创建基于矢量的路径.使用此类可以定义常见的圆形.多边形等形状 .我们使用直线.弧(arc) ...
- Method to fix "Naming information cannot be located because the target principal name is incorrect." for AD replication failure
Assume Failure DC FP01 and Working DC DC01 1. Stop the Key Distribution Center (KDC) service on FP01 ...
- JQ----树杈型导航
简单的做了一个树杈型的导航结构如下所示: 废话不多说,上代码: HTML: <div class="wrapper"> <div class="tabt ...
- 是一个IPV6地址
每次在VS上调试,发现本机地址是 ::1 这种就不解.由于太忙而没关注,今天看了IPV6的文章才明白.原来这是个IPV6地址,也就是本机环回地址.以前是127.0.0.1,IPV4版本,而IPV6的就 ...