2013 장사 인터넷 경기 J 문제 캔디 스 (차분 구속 또는 수학 법칙) \ # by zh
계차 제약: 전 i 개인 이 돌 개 수 를 가 진 최대 가능 치 와 최소 가능 치 를 각각 유지 합 니 다. i 개인 이 가능 한 최대 수 치 는 dismax [i] - dismin [i - 1] 입 니 다.
수학 규칙: 3, 6, 9,..........................................................................
#include <iostream>
#include <cstdio>
#include <cstring>
#include <queue>
#include <vector>
using namespace std;
#define MAXN 100005
int dismax[MAXN],dismin[MAXN];
int vis[MAXN];
const int INF=0x3f3f3f3f;
struct Node
{
int v,w;
Node(int a,int b){v=a,w=b;}
};
int n;
vector<Node> gmin[MAXN],gmax[MAXN];
void spfamax()
{
for(int i=0;i<=n;i++)
dismax[i]=INF;
memset(vis,0,sizeof(vis));
dismax[0]=0;
queue<int> q;
q.push(0);
while(!q.empty())
{
int u=q.front();
q.pop();
vis[u]=false;
int len=gmax[u].size();
for(int i=0;i<len;i++)
{
int v=gmax[u][i].v,w=gmax[u][i].w;
if(dismax[v]>dismax[u]+w)
{
dismax[v]=dismax[u]+w;
if(!vis[v])
{
vis[v]=true;
q.push(v);
}
}
}
}
}
void spfamin()
{
for(int i=0;i<=n;i++)
dismin[i]=-INF;
memset(vis,0,sizeof(vis));
dismin[0]=0;
queue<int> q;
q.push(0);
while(!q.empty())
{
int u=q.front();
q.pop();
vis[u]=false;
int len=gmin[u].size();
for(int i=0;i<len;i++)
{
int v=gmin[u][i].v,w=gmin[u][i].w;
if(dismin[v]<dismin[u]+w)
{
dismin[v]=dismin[u]+w;
if(!vis[v])
{
vis[v]=true;
q.push(v);
}
}
}
}
}
int main()
{
//freopen("test.txt","r",stdin);
while(scanf("%d",&n)!=EOF)
{
for(int i=0;i<=n;i++)
gmin[i].clear(),gmax[i].clear();
for(int i=1;i<=n;i++)
{
gmax[i].push_back(Node(i-1,0));
gmin[i-1].push_back(Node(i,0));
}
for(int i=1;i<=n;i++)
{
int temp;
scanf("%d",&temp);
if(temp!=-1)
{
gmax[i-1].push_back(Node(i,temp));
gmax[i].push_back(Node(i-1,-temp));
gmin[i-1].push_back(Node(i,temp));
gmin[i].push_back(Node(i-1,-temp));
}
}
for(int i=1;i<=n;i++)
{
int w;
scanf("%d",&w);
int u=max(0,i-2),v=min(n,i+1);
gmax[u].push_back(Node(v,w));
gmax[v].push_back(Node(u,-w));
gmin[u].push_back(Node(v,w));
gmin[v].push_back(Node(u,-w));
}
spfamax();
spfamin();
int q;
scanf("%d",&q);
for(int i=0;i<q;i++)
{
int temp;
scanf("%d",&temp);
temp++;
printf("%d
",dismax[temp]-dismin[temp-1]);
}
}
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.