pat1003
来源:互联网 发布:软件详细设计实例 编辑:程序博客网 时间:2024/05/13 19:36
http://www.patest.cn/contests/pat-a-practise/1003
#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
#define MAX 510
#define INF 0x0fffffff
int n,m,st,ed;
int price[MAX];
int G[MAX][MAX];
int dis[MAX];
int vis[MAX];
int sum=0;
int num=0;
void dfs(int now_v,int ed,int now_dis,int s)
{
vis[now_v]=1;
if(now_dis==dis[ed]&&now_v==ed)
{
num++;
if(s>sum)
sum=s;
return;
}
if(now_dis>dis[ed])
return;
int i;
for(i=0;i<n;i++)
{
if(!vis[i])
{
dfs(i,ed,now_dis+G[now_v][i],s+price[i]);
vis[i]=0;
}
}
}
void dij()
{
int visit[MAX]={0};
int i,j;
for(i=0;i<n;i++)
dis[i]=G[st][i];
visit[st]=1;
for(i=1;i<=n;i++)
{
int min=INF;
int v;
for(j=0;j<n;j++)
{
if(!visit[j]&&dis[j]<min)
{
min=dis[j];
v=j;
}
}
visit[v]=1;
for(j=0;j<n;j++)
{
if(!visit[j]&&dis[j]>dis[v]+G[v][j])
dis[j]=dis[v]+G[v][j];
}
}
}
int main()
{
// freopen("C:\\1.txt","r",stdin);
cin>>n>>m>>st>>ed;
int i,j;
for(i=0;i<n;i++)
scanf("%d",&price[i]);
for(i=0;i<n;i++)
for(j=0;j<n;j++)
if(i!=j)
G[i][j]=INF;
for(i=0;i<m;i++)
{
int u,v,w;
scanf("%d%d%d",&u,&v,&w);
G[u][v]=w;
G[v][u]=w;
}
dij();
dfs(st,ed,0,price[st]);
printf("%d %d\n",num,sum);
return 0;
}
- PAT1003
- PAT1003
- PAT1003
- pat1003
- pat1003
- pat1003
- PAT1003
- PAT1003
- PAT1003
- PAT1003
- pat1003
- PAT1003. Emergency
- pat1003 Emergency
- pat1003. Emergency
- PAT1003. Emergency (25)
- PAT1003 我要通过
- PAT1003. 我要通过
- PAT1003 我要通过!
- pat1002
- oracle菜鸟日记3
- 从创意到创新之一
- POJ 3253 Fence Repair(贪心)
- Java知识整理——容器
- pat1003
- iOS音频格式转换工具库:ExtAudioConverter
- HashMap 剖析与理解
- 总结一下在网页上动画效果都是怎么搞的
- [JSP]<%@include%>指令与<jsp:include>动作区别
- java环境变量设置
- 《情商》摘抄
- 为Android-x86编译tcpdump工具
- 从创意到创新之二