Online JudgeProblem SetAuthorsOnline ContestsUser
Web Board
Home Page
F.A.Qs
Statistical Charts
Problems
Submit Problem
Online Status
Prob.ID:
Register
Update your info
Authors ranklist
Current Contest
Past Contests
Scheduled Contests
Award Contest
User ID:
Password:
  Register

Re:献上我的测试数据

Posted by hataksumo at 2012-05-28 11:04:33 on Problem 1062
In Reply To:献上我的测试数据 Posted by:chouy at 2011-05-11 15:51:57
我的测试数据除了第7组都过了,但还是wa.
第7组我算的是4000:
#include<cstdio>
#include<queue>
#include<cstring>

using namespace std;
/*********************前向星*********************/
const int maxe=20000;
const int maxn=101;
struct 
{
	int pre,to,w;
}edge[maxe];//所有边的内存池
struct  
{
	int val;
	int rank;
}nodeData[maxn];//结点的数据
int lenth=0;
int box[maxn];//总记录他最后一条边的地址
int n,e;//结点数,边数
void addDirectedPath(int from,int to,int w)
{
	edge[lenth].to = to;
	edge[lenth].pre = box[from];
	edge[lenth].w = w;
	box[from] = lenth++;
}

void iniList()
{
	lenth=1;
	memset(box,-1,sizeof(box));
	edge[0].pre=-1;
	edge[0].to = -1;
}
#define DEFAULTVALUE 0x1f1f1f1f

class qnode
{
public:
	int to;
	int v;
	int topRank;
	int bottomRank;
	qnode(int tt,int vv,int br,int tr):to(tt),v(vv),topRank(tr),bottomRank(br){}
	bool operator < (const qnode& other)const
	{
		return v> other.v;
	}
};
void iniDjstra(int *cost,char *vis)
{
	memset(cost,0x1f,sizeof(int)*(n+1));
	memset(vis,0,sizeof(char)*(n+1));
}
//整条路径的等级差不能超过rd
void djstra(int *cost,char *vis,int start,int rd)
{
	qnode cur(start,nodeData[start].val,nodeData[start].rank,nodeData[start].rank);
	priority_queue<qnode> pq;
	int lpds;
	int neval;
	int topRank,bottomRank;
	pq.push(cur);
	cost[start] = nodeData[start].val;
	while(!pq.empty())
	{
		cur = pq.top();
		pq.pop();
		vis[cur.to] = 1;
		for(lpds = box[cur.to];lpds!=-1;lpds = edge[lpds].pre)
		{
			topRank = cur.topRank>nodeData[edge[lpds].to].rank?cur.topRank:nodeData[edge[lpds].to].rank;
			bottomRank = cur.bottomRank < nodeData[edge[lpds].to].rank?cur.bottomRank:nodeData[edge[lpds].to].rank;
			if((!vis[edge[lpds].to])&&topRank-bottomRank<=rd)
			{
				neval = cur.v - nodeData[cur.to].val  + edge[lpds].w + nodeData[edge[lpds].to].val;
				if(cost[edge[lpds].to] > neval)
				{
					cost[edge[lpds].to] = neval;
					pq.push(qnode(edge[lpds].to,neval,bottomRank,topRank));
				}
			}
		}
	}
}

int main()
{
	int difference,numberOfItems;
	//int mxRank=-1,indexOfItemForMxRank=-1;
	int i;
	int val,rank,numberOfSubstitutes;
	int index,concessionalPrice;
	int cost[maxn];
	char vis[maxn];
	iniList();
	while(~scanf("%d%d",&difference,&numberOfItems))
	{
		n = numberOfItems;
		for(i=1;i<=numberOfItems;i++)
		{
			scanf("%d%d%d",&val,&rank,&numberOfSubstitutes);
			nodeData[i].rank = rank;
			nodeData[i].val = val;
			while(numberOfSubstitutes--)
			{
				scanf("%d%d",&index,&concessionalPrice);
				addDirectedPath(i,index,concessionalPrice);
			}
		}
		iniDjstra(cost,vis);
		djstra(cost,vis,1,difference);
		int minCost = 0x1f1f1f1f;
		for(i=1;i<=n;i++)
		{
			if(minCost>cost[i])minCost = cost[i];
		}
		printf("%d\n",minCost);
	}
	return 0;
}
/*
3 8
10000 3 6
2 3000
3 2000
4 2000
5 9000
7 1000
8 5008
8000 2 3
3 5000
4 2000
5 7000
5000 1 1
6 1000
2000 4 1
5 1900
50 1 0
5000 1 1
7 4007
2000 4 1
5 1900
80 3 0
*/

Followed by:

Post your reply here:
User ID:
Password:
Title:

Content:

Home Page   Go Back  To top


All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator