HDU-3339 最短路+背包问题
2012-04-15 17:22
369 查看
/* * hdu-3339 * mike-w * 2012-4-14 */ #include<stdio.h> #include<stdlib.h> #include<string.h> #define MAX_SIZE 128 #define Q_SIZE 256 #define TOTAL_DIST_MAX (MAX_SIZE*MAX_SIZE-100) #define INF 99999999 #define min(a,b) ((a)<(b)?(a):(b)) #define max(a,b) ((a)<(b)?(b):(a)) int p[MAX_SIZE]; int f[MAX_SIZE][MAX_SIZE]; int dst[MAX_SIZE]; int opt[MAX_SIZE*MAX_SIZE]; int que[Q_SIZE],qhead,qtail,qlen; int inq[MAX_SIZE]; int T,N,M; int enque(int e) { if(qlen==Q_SIZE) return -1; qlen++; que[qtail]=e; qtail=(qtail+1)%Q_SIZE; return 0; } int deque(int *e) { if(qlen==0) return -1; qlen--; *e=que[qhead]; qhead=(qhead+1)%Q_SIZE; return 0; } int spfa(void) { int i,x; qhead=qtail=qlen=0; for(i=0;i<=N;i++) dst[i]=INF,inq[i]=0; dst[0]=0; enque(0); inq[0]=1; while(deque(&x)!=-1) { inq[x]=0; for(i=0;i<=N;i++) if(dst[x]+f[x][i]<dst[i]) { dst[i]=dst[x]+f[x][i]; if(!inq[i]) enque(i),inq[i]=1; } } return 0; } int main(void) { #ifndef ONLINE_JUDGE freopen("in","r",stdin); #endif int i,j,t1,t2,t3; int min_cost; int half_power,total_power; scanf("%d",&T); while(T-->0) { scanf("%d%d",&N,&M); /* initialize */ for(i=0;i<=N;i++) for(j=0;j<=N;j++) f[i][j]=INF; memset(p,0,sizeof(p)); /* read input */ for(i=1;i<=M;i++) { scanf("%d%d%d",&t1,&t2,&t3); f[t1][t2]=f[t2][t1]=min(f[t1][t2],t3); } total_power=half_power=0; for(i=1;i<=N;i++) scanf("%d",p+i),total_power+=p[i]; half_power=total_power/2; /* calculate shortest path */ spfa(); /* backpack problem */ memset(opt,0,sizeof(opt)); for(i=1;i<=N;i++) for(j=TOTAL_DIST_MAX;j>=dst[i];j--) opt[j]=max(opt[j],opt[j-dst[i]]+p[i]); min_cost=INF; for(i=0;i<=TOTAL_DIST_MAX;i++) if(opt[i]>half_power) min_cost=i,i=TOTAL_DIST_MAX+1; if(min_cost==INF) puts("impossible"); else printf("%d\n",min_cost); } return 0; }
相关文章推荐
- HDU 3339(In Action)最短路SPFA+0-1背包问题
- HDU-3339 In Action 最短路+01背包
- HDU 3339 In Action 最短路+01背包
- HDU 3339 In Action(背包+最短路)
- hdu 3339 最短路+背包
- HDU 3339最短路+背包
- hdu 3339 In Action 最短路+(01)背包
- HDU 3339 In Action 价值为最短路的背包
- In Action 最短路加背包 HDU 3339
- HDu 3339 In Action 【最短路 + 背包】好题!!!
- hdu 3339 最短路+背包
- HDU 3339 In Action(最短路+0-1背包)
- hdu 1284 钱币兑换问题(完全背包)
- hdu 3790 最短路径问题(最短路,Dijsktra)
- 动态规划 ③ HDU - 1203 I NEED A OFFER! 背包问题+独立事件概率
- hdu 1864 01背包问题
- HDU - 2544 - 最短路 (最基础单源最短路问题!!dijkstra+floyd+SPFA)
- HDU 钱币兑换问题(完全背包?)
- HDU 3594 The trouble of Xiaoqian 混合背包问题
- HDU_2955_背包问题