結果
| 問題 |
No.2319 Friends+
|
| コンテスト | |
| ユーザー |
|
| 提出日時 | 2023-05-27 15:30:08 |
| 言語 | Java (openjdk 23) |
| 結果 |
AC
|
| 実行時間 | 1,279 ms / 3,000 ms |
| コード長 | 9,546 bytes |
| コンパイル時間 | 4,633 ms |
| コンパイル使用メモリ | 91,836 KB |
| 実行使用メモリ | 210,924 KB |
| 最終ジャッジ日時 | 2024-12-26 00:34:43 |
| 合計ジャッジ時間 | 45,654 ms |
|
ジャッジサーバーID (参考情報) |
judge1 / judge2 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 2 |
| other | AC * 45 |
ソースコード
import java.io.InputStream;
import java.io.PrintStream;
import java.io.PrintWriter;
import java.io.IOException;
import java.math.BigInteger;
import java.awt.Point;
import java.awt.Dimension;
import java.util.*;
import java.util.stream.*;
import java.util.function.*;
public final class Main {
private static final boolean autoFlush = false;
private static final SimpleScanner sc = new SimpleScanner( System.in );
private static final SimplePrinter out = new SimplePrinter( System.out, autoFlush );
public static void main ( String[] args ) {
int N = sc.nextInt();
int M = sc.nextInt();
BitSet[] world = new BitSet[N+1];
for(int i=1;i<=N;i++)
world[i] = new BitSet(N+1);
int[] P = new int[N+1];
for(int i=1;i<=N;i++)
world[P[i]=sc.nextInt()].set(i);
BitSet[] friend = new BitSet[N+1];
for(int i=1;i<=N;i++)
friend[i] = new BitSet(N+1);
while(M-->0){
int A = sc.nextInt();
int B = sc.nextInt();
friend[A].set(B);
friend[B].set(A);
}
int Q = sc.nextInt();
while(Q-->0){
int X = sc.nextInt();
int Y = sc.nextInt();
BitSet set = (BitSet)friend[X].clone();
set.and(world[P[Y]]);
if(P[X]!=P[Y]&&set.cardinality()>0){
world[P[X]].clear(X);
world[P[Y]].set(X);
P[X] = P[Y];
out.println("Yes");
}
else
out.println("No");
}
out.close();
}
}
/*
/ ̄\
| |
\_/
|
/  ̄  ̄ \
/ \ / \
/ ⌒ ⌒ \ よくぞこの提出結果を開いてくれた
| (__人__) | 褒美としてオプーナを買う権利をやる
\ `⌒´ / ☆
/ヽ、--ー、__, -‐ ´ \─/
/ > ヽ▼●▼<\ ||ー、.
/ヽ、 \ i |。| |/ ヽ (ニ、`ヽ.
l ヽ l |。| | r-、y `ニ ノ \
l | |ー─ |  ̄ l `~ヽ_ノ__
/ ̄ ̄ ̄ ̄ヽ-'ヽ--' / オープナ /|
| ̄ ̄ ̄ ̄ ̄ ̄|/| | ̄ ̄ ̄ ̄ ̄ ̄|/| ______
/ ̄オプーナ/| ̄|__」/_オープナ /| ̄|__,」__ /|
| ̄ ̄ ̄ ̄ ̄|/オープナ ̄/ ̄ ̄ ̄ ̄|/オプーナ /| / |
| ̄ ̄ ̄ ̄ ̄| ̄ ̄ ̄ ̄ ̄|/l ̄ ̄ ̄ ̄| ̄ ̄ ̄ ̄ ̄|/| /
| ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄|
*/
/*////////////////////////////////////////////////
* My Library *
@author viral
*/////////////////////////////////////////////////
// MyScanner
final class SimpleScanner {
final private int buff_size = 1 << 12;
private final InputStream is;
private final byte[] buff;
private int point, length;
public SimpleScanner ( InputStream is ) {
this.is = is;
buff = new byte[buff_size];
point = length = 0;
}
private void reload () {
do {
try {
length = is.read( buff, point = 0, buff_size );
} catch ( IOException e ) {
e.printStackTrace();
System.exit( 1 );
}
} while ( length == -1 );
}
private byte read () {
if ( point == length ) {
reload();
}
return buff[point++];
}
public byte nextByte () {
byte c = read();
while ( c <= ' ' ) {
c = read();
}
return c;
}
public int nextInt () {
int ans = 0;
byte c = read();
while ( c <= ' ' ) {
c = read();
}
boolean negate = c == '-';
if ( c == '-' ) {
c = read();
}
while ( '0' <= c && c <= '9' ) {
ans = ans * 10 + c - '0';
c = read();
}
return negate ? -ans : ans;
}
public long nextLong () {
long ans = 0;
byte c = read();
while ( c <= ' ' ) {
c = read();
}
boolean negate = c == '-';
if ( c == '-' ) {
c = read();
}
while ( '0' <= c && c <= '9' ) {
ans = ans * 10 + c - '0';
c = read();
}
return negate ? -ans : ans;
}
public char nextChar () {
byte c = read();
while ( c <= ' ' ) {
c = read();
}
return ( char )c;
}
public String next () {
StringBuilder ans = new StringBuilder();
byte c = read();
while ( c <= ' ' ) {
c = read();
}
while ( c > ' ' ) {
ans.append( ( char )c );
c = read();
}
return ans.toString();
}
public byte[] nextByte ( int n ) {
byte[] ans = new byte[n];
for ( int i = 0; i < n; ++i ) {
ans[i] = nextByte();
}
return ans;
}
public int[] nextInt ( int n ) {
int[] ans = new int[n];
for ( int i = 0; i < n; ++i ) {
ans[i] = nextInt();
}
return ans;
}
public long[] nextLong ( int n ) {
long[] ans = new long[n];
for ( int i = 0; i < n; ++i ) {
ans[i] = nextLong();
}
return ans;
}
public String[] next ( int n ) {
String[] ans = new String[n];
for ( int i = 0; i < n; ++i ) {
ans[i] = next();
}
return ans;
}
public byte[][] nextByte ( int n, int m ) {
byte[][] ans = new byte[n][];
for ( int i = 0; i < n; ++i ) {
ans[i] = nextByte( m );
}
return ans;
}
public int[][] nextInt ( int n, int m ) {
int[][] ans = new int[n][];
for ( int i = 0; i < n; ++i ) {
ans[i] = nextInt( m );
}
return ans;
}
public long[][] nextLong ( int n, int m ) {
long[][] ans = new long[n][];
for ( int i = 0; i < n; ++i ) {
ans[i] = nextLong( m );
}
return ans;
}
public String[][] next ( int n, int m ) {
String[][] ans = new String[n][];
for ( int i = 0; i < n; ++i ) {
ans[i] = next( m );
}
return ans;
}
public char[] nextCharArray () {
return next().toCharArray();
}
public char[][] nextCharArray ( int n ) {
char[][] ans = new char[n][];
for ( int i = 0; i < n; ++i ) {
ans[i] = nextCharArray();
}
return ans;
}
public int[][] nextGraph ( int N, int M ) {
if ( M == 0 ) {
return new int[N + 1][0];
}
int[][] ans = new int[N + 1][];
int[] count = new int[N + 1];
int[][] path = nextInt( M, 2 );
for ( int[] temp: path ) {
++count[temp[0]];
++count[temp[1]];
}
for ( int i = 1; i <= N; ++i ) {
ans[i] = new int[count[i]];
}
for ( int[] temp: path ) {
ans[temp[0]][--count[temp[0]]] = temp[1];
ans[temp[1]][--count[temp[1]]] = temp[0];
}
ans[0] = new int[0];
return ans;
}
public Point nextPoint () {
return new Point( nextInt(), nextInt() );
}
public Point[] nextPoint ( int n ) {
Point[] ans = new Point[n];
for ( int i = 0; i < n; ++i ) {
ans[i] = nextPoint();
}
return ans;
}
public void close () {
try {
is.close();
} catch ( IOException e ) {
e.printStackTrace();
System.exit( 1 );
}
}
}
// MyPrinter
final class SimplePrinter extends PrintWriter {
public SimplePrinter ( PrintStream os ) {
super( os );
}
public SimplePrinter ( PrintStream os, boolean bool ) {
super( os, bool );
}
public void println ( int[] array ) {
println( array, ' ' );
}
public void println ( int[] array, String str ) {
print( array[0] );
for ( int i = 1; i < array.length; ++i ) {
print( str );
print( array[i] );
}
println();
}
public void println ( int[] array, char c ) {
print( array[0] );
for ( int i = 1; i < array.length; ++i ) {
print( c );
print( array[i] );
}
println();
}
public void println ( int[][] array ) {
println( array, ' ' );
}
public void println ( int[][] arrays, String str ) {
for ( int[] array: arrays ) {
println( array, str );
}
}
public void println ( int[][] arrays, char c ) {
for ( int[] array: arrays ) {
println( array, c );
}
}
public void println ( long[] array ) {
println( array, ' ' );
}
public void println ( long[] array, String str ) {
print( array[0] );
for ( int i = 1; i < array.length; ++i ) {
print( str );
print( array[i] );
}
println();
}
public void println ( long[] array, char c ) {
print( array[0] );
for ( int i = 1; i < array.length; ++i ) {
print( c );
print( array[i] );
}
println();
}
public void println ( long[][] array ) {
println( array, ' ' );
}
public void println ( long[][] arrays, String str ) {
for ( long[] array: arrays ) {
println( array, str );
}
}
public void println ( long[][] arrays, char c ) {
for ( long[] array: arrays ) {
println( array, c );
}
}
public void println ( char[] cs, String str ) {
print( cs[0] );
for ( int i = 1; i < cs.length; ++i ) {
print( str );
print( cs[i] );
}
println();
}
public void println ( char[] cs, char c ) {
print( cs[0] );
for ( int i = 1; i < cs.length; ++i ) {
print( c );
print( cs[i] );
}
println();
}
public void println ( char[][] cs ) {
for ( char[] c: cs ) {
println( c );
}
}
public void println ( char[][] cs, String str ) {
print( cs[0] );
for ( int i = 1; i < cs.length; ++i ) {
print( str );
print( cs[i] );
}
println();
}
public void println ( char[][] cs, char c ) {
print( cs[0] );
for ( int i = 1; i < cs.length; ++i ) {
print( c );
print( cs[i] );
}
println();
}
public <E> void println ( E[] array ) {
println( array, ' ' );
}
public <E> void println ( E[] array, String str ) {
print( array[0] );
for ( int i = 1; i < array.length; ++i ) {
print( str );
print( array[i] );
}
println();
}
public <E> void println ( E[] array, char c ) {
print( array[0] );
for ( int i = 1; i < array.length; ++i ) {
print( c );
print( array[i] );
}
println();
}
public <E> void println ( E[][] arrays ) {
println( arrays, ' ' );
}
public <E> void println ( E[][] arrays, String str ) {
for ( E[] array: arrays ) {
println( array, str );
}
}
public <E> void println ( E[][] arrays, char c ) {
for ( E[] array: arrays ) {
println( array, c );
}
}
}