Logo Wy Online Judge

WyOJ

ID题目提交者结果用时内存语言文件大小提交时间测评时间
#389#37. 「NOIP2009」最优贸易j27eGU100765ms8516kbC++231.3kb2025-04-23 11:36:432025-04-23 11:36:44

answer

#include<bits/stdc++.h>
using namespace std;
#define MAXN 100010
vector <int> g[MAXN],_g[MAXN];
int n,m,p[MAXN],maxn[MAXN],minn[MAXN];
bool inq[MAXN];
queue <int> q;
void spfa1(int s)
{
	memset(inq,0,sizeof(inq));
	memset(minn,0x3f,sizeof(minn));
	while(!q.empty())q.pop();
	q.push(s);
	minn[s]=p[s];
	inq[s]=1;
	while(!q.empty())
	{
		int u=q.front();
		q.pop();
		inq[u]=0;
		for(int i=0;i<g[u].size();i++)
		{
			int v=g[u][i];
			if(minn[v]>min(minn[u],p[v]))
			{
				minn[v]=min(minn[u],p[v]);
				if(!inq[v])q.push(v),inq[v]=1;
			}
		}
	}
}
void spfa2(int s)
{
	memset(inq,0,sizeof(inq));
	memset(maxn,-0x3f,sizeof(maxn));
	while(!q.empty())q.pop();
	q.push(s);
	maxn[s]=p[s];
	inq[s]=1;
	while(!q.empty())
	{
		int u=q.front();
		q.pop();
		inq[u]=0;
		for(int i=0;i<_g[u].size();i++)
		{
			int v=_g[u][i];
			if(maxn[v]<max(maxn[u],p[v]))
			{
				maxn[v]=max(maxn[u],p[v]);
				if(!inq[v])q.push(v),inq[v]=1;
			}
		}
	}
}
int main()
{
	cin>>n>>m;
	for(int i=1;i<=n;i++)cin>>p[i];
	for(int i=1;i<=m;i++)
	{
		int u,v,w;
		cin>>u>>v>>w;
		g[u].push_back(v);
		_g[v].push_back(u);
		if(w==2)g[v].push_back(u),_g[u].push_back(v);
	}
	spfa1(1);
	spfa2(n);
	int ans=0;
	for(int i=1;i<=n;i++)ans=max(ans,maxn[i]-minn[i]);
	cout<<ans;
	return 0;
}

详细

小提示:点击横条可展开更详细的信息

Test #1:

score: 10
Accepted
time: 1ms
memory: 4356kb

input:

6 6
100 64 47 50 57 1
1 2 1
2 3 1
1 3 1
1 4 1
1 5 1
5 6 1

output:

0

result:

ok 1 number(s): "0"

Test #2:

score: 10
Accepted
time: 5ms
memory: 4304kb

input:

10 20
100 89 100 72 39 50 74 50 50 1
1 2 1
1 3 1
1 4 1
2 5 1
1 5 1
3 5 1
2 3 1
2 4 1
3 4 1
4 5 1
1 6...

output:

24

result:

ok 1 number(s): "24"

Test #3:

score: 10
Accepted
time: 13ms
memory: 4444kb

input:

1000 5000
100 73 41 70 51 27 23 31 15 36 90 58 36 12 55 27 2 41 78 98 88 20 66 70 18 82 97 98 1 89 7...

output:

8

result:

ok 1 number(s): "8"

Test #4:

score: 10
Accepted
time: 128ms
memory: 6184kb

input:

10000 100000
100 33 61 93 55 29 44 93 70 28 5 55 84 98 90 37 29 30 95 29 30 31 43 25 65 99 70 49 22 ...

output:

13

result:

ok 1 number(s): "13"

Test #5:

score: 10
Accepted
time: 159ms
memory: 8204kb

input:

50000 100000
100 90 26 38 9 47 89 99 3 27 3 64 29 28 47 27 72 3 79 64 35 68 62 21 11 19 26 11 23 33 ...

output:

4

result:

ok 1 number(s): "4"

Test #6:

score: 10
Accepted
time: 0ms
memory: 4388kb

input:

100 500
100 79 81 43 61 74 4 42 11 37 27 27 5 30 30 22 3 49 69 79 88 28 91 80 51 18 45 19 20 99 50 1...

output:

5

result:

ok 1 number(s): "5"

Test #7:

score: 10
Accepted
time: 24ms
memory: 4516kb

input:

1000 10000
100 12 34 95 100 42 16 23 29 20 98 32 19 6 26 20 32 49 79 98 40 89 63 4 75 34 42 44 86 20...

output:

15

result:

ok 1 number(s): "15"

Test #8:

score: 10
Accepted
time: 79ms
memory: 7688kb

input:

10000 50000
100 91 15 100 2 73 60 37 87 92 48 67 18 53 76 63 39 62 77 50 71 66 68 90 9 34 54 36 46 7...

output:

17

result:

ok 1 number(s): "17"

Test #9:

score: 10
Accepted
time: 190ms
memory: 8516kb

input:

50000 100000
100 100 77 48 5 26 42 78 18 51 73 96 40 1 38 12 75 88 77 34 85 29 37 30 37 68 81 36 89 ...

output:

16

result:

ok 1 number(s): "16"

Test #10:

score: 10
Accepted
time: 166ms
memory: 8444kb

input:

50000 100000
100 15 57 29 70 54 80 43 98 13 1 21 27 21 40 10 5 79 99 15 2 37 15 59 35 86 87 77 28 4 ...

output:

2

result:

ok 1 number(s): "2"