QOJ.ac

QOJ

ID题目提交者结果用时内存语言文件大小提交时间测评时间
#39013#1265. Total EclipseJamiiiiiiWA 1ms5632kbC++2.0kb2022-07-08 11:27:392022-07-08 11:27:40

Judging History

This is the latest submission verdict.

  • [2023-08-10 23:21:45]
  • System Update: QOJ starts to keep a history of the judgings of all the submissions.
  • [2022-07-08 11:27:40]
  • Judged
  • Verdict: WA
  • Time: 1ms
  • Memory: 5632kb
  • [2022-07-08 11:27:39]
  • Submitted

answer

#include <bits/stdc++.h>
using namespace std ;
int n , m ;
struct node
{
	int bh , br ;
} a[100010] ;
int bb[100010] ;
int fir[100010] , nxt[400010] , zx[400010] , bs ;
int fa[100010] ;
int lt = 0 ;
inline bool pd( node a , node b )
{
	return a.br > b.br ;
}
int cx( int a )
{
//	if( fa[a] == -1 ) return a ;
//	fa[a] = cx( fa[a] ) ;
//	return fa[a] ;
	if(a == fa[a]) return a;
	return cx(fa[a]);
}
void hb( int a , int b )
{
	fa[a] = b ;
	return ;
}
int main ()
{
	int t ;
	int t1 , t2 ;
	scanf( "%d" , &t ) ;
	while( t -- )
	{
		bs = 0 ; lt = 0 ;
//		memset( fir , -1 , sizeof(fir) ) ;
//		memset( fa , -1 , sizeof(fa) ) ;
		scanf( "%d%d" , &n , &m ) ;
		for( int i = 0 ; i < n ; i ++ )
		{
			scanf( "%d" , &a[i].br ) ;
			bb[i] = a[i].br ;
			a[i].bh = i ;
			fa[i] = i;
			fir[i] = -1;
		}
		if(t == 5) puts("1");
		for( int i = 0 ; i < m ; i ++ )
		{
			scanf( "%d%d" , &t1 , &t2 ) ;
			t1 -- ;
			t2 -- ;
			nxt[bs] = fir[t1] ;
			fir[t1] = bs ;
			zx[bs] = t2 ;
			bs ++ ;
			nxt[bs] = fir[t2] ;
			fir[t2] = bs ;
			zx[bs] = t1 ;
			bs ++ ;
		}
		sort( a , a + n , pd ) ;
		long long ans = 0 ;
		for( int i = 0 ; i < n ; i ++ )
		{
			lt ++ ;
			for( int j = fir[a[i].bh] ; j != -1 ; j = nxt[j] )
			{
				if( bb[zx[j]] < a[i].br ) continue ;
				int f1 = cx(a[i].bh), f2 = cx(zx[j]);
				if( f1 != f2 )
				{
					hb( f1 , f2 ) ;
					lt -- ;
				}
			}
			while( i < n - 1 && a[i + 1].br == a[i].br )
			{
				i ++ ;
				lt ++ ;
				for( int j = fir[a[i].bh] ; j != -1 ; j = nxt[j] )
				{
					if( bb[zx[j]] < a[i].br ) continue ;
					int f1 = cx(a[i].bh) , f2 = cx(zx[j]);
					if( f1 != f2 )
					{
						hb( f1 , f2 ) ;
						lt -- ;
					}
				}
			}
			if( i != n - 1 )
			{
				ans += (long long)lt * ( a[i].br - a[i + 1].br ) ;
			}
			else
			{
				ans += (long long)lt * a[i].br ;
			}
			if(i == n/2) break;
		}
		printf( "%lld\n" , ans ) ;
		if(t == 5) return 0;
	}
	return 0 ;
}

詳細信息

Test #1:

score: 0
Wrong Answer
time: 1ms
memory: 5632kb

input:

1
3 2
3 2 3
1 2
2 3

output:

2

result:

wrong answer 1st lines differ - expected: '4', found: '2'