QOJ.ac

QOJ

ID题目提交者结果用时内存语言文件大小提交时间测评时间
#574271#9315. Rainbow Bracket Sequenceqkm66666WA 1ms4124kbC++173.3kb2024-09-18 21:19:172024-09-18 21:19:17

Judging History

你现在查看的是最新测评结果

  • [2024-09-18 21:19:17]
  • 评测
  • 测评结果:WA
  • 用时:1ms
  • 内存:4124kb
  • [2024-09-18 21:19:17]
  • 提交

answer

#include<algorithm>
#include<iostream>
#include<cstdlib>
#include<cstring>
#include<cassert>
#include<cstdio>
#include<cctype>
#include<vector>
#include<bitset>
#include<random>
#include<ctime>
#include<queue>
#include<cmath>
#include<list>
#include<map>
#include<set>
#define pb push_back
#define mp make_pair
#define pii pair<int,int>
#define pll pair<long long,long long>
#define FF fflush(stdout)
#define inf 0x3f3f3f3f
#define endl "\n"
#define fi first
#define se second
typedef long long ll;
typedef unsigned long long ull;
using namespace std;
inline int read()
{
    int s=0,f=1;
    char x=getchar();
    while(!isdigit(x))f=(x=='-'?-1:1),x=getchar();
    while(isdigit(x))s=s*10+x-'0',x=getchar();
    return s*f;
}
int s,t;
struct hlydl{
	int x,y,c,v,nxt;
    void clr()
    {
        x=y=c=v=nxt=0;
    }
}e[100005];
int num=2;
int hd[5005];
void addedge(int x,int y,int c,int v)
{
	e[num].x=x;
	e[num].y=y;
	e[num].c=c;
	e[num].v=v;
	e[num].nxt=hd[x];
	hd[x]=num++;
}
ll dis[5005];
bool in[5005];
int cur[5005];
bool vis[5005];
bool spfa()
{
	queue<int> q;
	memset(dis,0x3f,sizeof(dis));
	dis[s]=0;
	q.push(s);
	while(!q.empty())
	{
		int x=q.front();
        cur[x]=hd[x];
		q.pop();
		in[x]=0;
		for(int i=hd[x];i;i=e[i].nxt)
		{
			int to=e[i].y;
			if(e[i].c>0&&dis[to]>dis[x]+e[i].v)
			{
				dis[to]=dis[x]+e[i].v;
				if(!in[to])
				{
					in[to]=1;
					q.push(to);
				}
			}
		}
	}
	return dis[t]!=dis[0];
}
long long mf=0,mc=0;
ll dfs(int x,ll in)
{
	if(x==t)return in;
	ll ans=0;
    vis[x]=1;
	for(int i=cur[x];i&&in;i=e[i].nxt)
	{
		cur[x]=i;
		int to=e[i].y;
		if(vis[to]||dis[to]!=dis[x]+e[i].v||!e[i].c)continue;
		ll del=dfs(to,min(in,(ll)e[i].c));
		e[i].c-=del;
		e[i^1].c+=del;
		ans+=del;
        mc+=del*e[i].v;
		in-=del;
	}
	return ans;
}
void MCMF()
{
	while(spfa())
	{
        memset(vis,0,sizeof(vis));
		mf+=dfs(s,inf);
	}
}
int c[105];
int w[205],col[205];
void add(int x,int y,int c,int v)
{
    addedge(x,y,c,v);
    addedge(y,x,0,-v);
}
#define reaD read
int main()
{
    int T=read();
    while(T--)
    {
        num=2;
        mc=mf=0;
        int n=read(),m=read();
        for(int i=1;i<=m;i++)
        c[i]=read();
        for(int i=1;i<=2*n;i++)
        col[i]=reaD();
        for(int i=1;i<=2*n;i++)
        w[i]=reaD();
        s=2*n+m+2+2*n,t=s+1;
        int tmp=s-1;
        int cnt=0;
        ll sum=0;
        for(int i=1;i<=2*n;i++)
        sum+=w[i];
        add(s,tmp,1e9,(int)2e9);
        for(int i=1;i<=m;i++)
        {
            add(s,i,c[i],0);
            cnt+=c[i];
        }
        for(int i=1;i<=2*n;i++)
        {
            add(col[i],i+m+2*n,1,0);
            add(tmp,i+m+2*n,1,0);
            add(i+m+2*n,i+m,1,0);
        }
        for(int i=2;i<=2*n;i++)
        add(i+m,i+m-1,1e9,w[i]-w[i-1]);
        for(int i=2;i<=2*n;i+=2)
        add(i+m,t,1,w[i]);
        MCMF();//cout<<mc<<" "<<mf<<endl;
        if(mf<cnt||e[3].c!=mf-cnt)puts("-1");
        else printf("%lld\n",sum+(mf-cnt)*(ll)2e9-mc);
        for(int i=2;i<=num;i++)
        e[i].clr();
        memset(hd,0,sizeof(hd));
    }
	
	return 0;
 } 
/*
2
3 2
1 1
1 2 2 2 2 1
3 4 1 2 2 1
3 2
1 2
1 2 2 2 1 2
3 1 1 2 40 4

*/

詳細信息

Test #1:

score: 100
Accepted
time: 0ms
memory: 4124kb

input:

2
3 2
1 2
1 2 2 2 1 2
3 1 4 2 2 1
3 2
2 2
1 2 2 2 1 2
3 1 4 2 2 1

output:

9
-1

result:

ok 2 number(s): "9 -1"

Test #2:

score: -100
Wrong Answer
time: 1ms
memory: 3912kb

input:

50
8 6
0 2 2 0 3 1
3 5 1 1 5 3 5 2 3 2 2 1 2 2 4 6
998133227 879226371 59632864 356493387 62611196 827258251 296576565 204244054 812713672 780267148 614679390 447700005 102067050 544546349 116002772 761999375
1 1
1
1 1
343766215 374461155
3 1
2
1 1 1 1 1 1
796323508 303640854 701432076 853325162 610...

output:

-1
343766215
2351080746
3426965219
-1
-1
1351561190
2539318868
1013080942
5372255482
1311169903
-1
-1
2585739197
3983627641
5685927653
-1
1046749330
6115214757
4234093903
-1
3762128853
4221028500
2566553992
5953721306
5977120748
7505501534
-1
4515956757
1467678317
883992368
-1
-1
4024634503
-1
14472...

result:

wrong answer 10th numbers differ - expected: '4656646546', found: '5372255482'