結果
| 問題 | No.3756 Udon Network |
| ユーザー |
チャラ
|
| 提出日時 | 2026-10-13 16:23:28 |
| 言語 | Java (openjdk 27 + ACL) |
| 結果 |
WA
不安定
|
| 実行時間 | - |
| コード長 | 13,385 bytes |
| 記録 | |
| コンパイル時間 | 4,560 ms |
| コンパイル使用メモリ | 103,988 KB |
| 実行使用メモリ | 152,604 KB |
| 最終ジャッジ日時 | 2026-10-13 16:24:27 |
| 合計ジャッジ時間 | 40,455 ms |
|
ジャッジサーバーID (参考情報) |
judge3_0 / judge2_0 |
(要ログイン)
| サブタスク | 配点 | 結果 |
|---|---|---|
| Example | 0 % | AC * 5 WA * 3 |
| Subtask $1$ | 2 % | AC * 5 WA * 10 |
| Subtask $2$ | 4 % | AC * 5 WA * 10 RE * 7 |
| Subtask $3$ | 8 % | AC * 2 WA * 6 RE * 1 |
| Subtask $4$ | 16 % | AC * 1 WA * 7 RE * 2 |
| Subtask $5$ | 32 % | AC * 2 WA * 5 RE * 3 |
| Subtask $6$ | 38 % | AC * 5 WA * 34 RE * 14 |
| 合計 | 4 * 0% = 0 点 |
ソースコード
import com.sun.source.tree.Tree;
import java.io.*;
import java.math.BigInteger;
import java.util.*;
import java.util.function.BiFunction;
import java.util.function.BinaryOperator;
import java.util.function.IntUnaryOperator;
import java.util.function.LongUnaryOperator;
import java.util.stream.Collectors;
public class Main {
static In in = new FastIn();
static Out out = new Out(false);
static final long inf = 0x1fffffffffffffffL;
static final int iinf = 0x3fffffff;
static final double eps = 1e-9;
static long mod = 998244353;
int n = in.nextInt();
int m = in.nextInt();
int qq = in.nextInt();
int[] a = in.nextIntArray(n);
E[] b = new E[m];
List<List<E>> e = new ArrayList<>();
void solve() {
for (int i = 0; i < n; i++) {
e.add(new ArrayList<>());
}
E[] es = new E[m];
for (int i = 0; i < m; i++) {
es[i] = new E(-1,-1,inf);
}
for (int i = 0; i < m; i++) {
int u = in.nextInt()-1;
int v = in.nextInt()-1;
long w = in.nextLong();
b[i] = new E(u,v,w);
e.get(u).add(new E(u,v,w));
e.get(v).add(new E(v,u,w));
}
E[] query = new E[qq];
for (int i = 0; i < qq; i++) {
int ss = in.nextInt()-1;
int cc = in.nextInt();
query[i] = new E(ss,i,cc);
}
Arrays.sort(b);
UnionFind uf = new UnionFind(n,query);
for (int i = 0; i < m; i++) {
uf.unite(b[i].u,b[i].v,b[i].w);
}
for (int i = 0; i < qq; i++) {
out.println(uf.ans[i]);
}
}
public static void main(String... args) {
new Main().solve();
out.flush();
}
}
class E implements Comparable<E>{
public int u;
public int v;
public long w;
public E(int u,int v,long w){
this.u = u;
this.v = v;
this.w = w;
}
@Override
public int compareTo(E o) {
return Long.compare(w,o.w);
}
}
class UnionFind{
int n;
int m;
int[] parent;
int[] size;
List<PriorityQueue<E>> pqs = new ArrayList<>();
E[] query;
long[] ans;
UnionFind(int n,E[] query){
parent = new int[n];
size = new int[n];
for (int i = 0; i < n; i++) {
parent[i] = i;
size[i] = 1;
}
this.n = n;
m = n;
this.query = query;
ans = new long[n];
for (int i = 0; i < n; i++) {
pqs.add(new PriorityQueue<>());
}
for (E e : query) {
pqs.get(e.u).add(e);
}
}
public int root(int x){
while (parent[x] != x){
x = parent[x] = parent[parent[x]];
}
return x;
}
public boolean unite(int x,int y,long cost){
x = root(x);
y = root(y);
if(x == y)return false;
if(size[x] > size[y]){
parent[y] = x;
size[x] += size[y];
pqs.get(x).addAll(pqs.get(y));
while(!pqs.get(x).isEmpty() && pqs.get(x).peek().w <= size[x]){
ans[pqs.get(x).poll().v] = cost;
}
}else{
parent[x] = y;
size[y] += size[x];
pqs.get(y).addAll(pqs.get(x));
while(!pqs.get(y).isEmpty() && pqs.get(y).peek().w <= size[y]){
ans[pqs.get(y).poll().v] = cost;
}
}
m--;
return true;
}
@Override
public String toString(){
List<StringJoiner> list = new ArrayList<>();
for (int i = 0; i < m; i++) {
list.add(new StringJoiner(" "));
}
int[] p = new int[n];
Arrays.fill(p,m);
int l = 0;
for (int i = 0; i < m; i++) {
if(p[root(i)] == m){
p[root(i)] = l;
l++;
}
list.get(p[root(i)]).add(i+"");
}
StringBuilder s = new StringBuilder();
for (int i = 0; i < m; i++) {
s.append(list.get(i));
}
return s.toString();
}
}
class FastIn extends In {
private final BufferedInputStream reader = new BufferedInputStream(System.in);
private final byte[] buffer = new byte[0x10000];
private int i = 0;
private int length = 0;
public int read() {
if (i == length) {
i = 0;
try {
length = reader.read(buffer);
} catch (IOException ignored) {
}
if (length == -1) {
return 0;
}
}
if (length <= i) {
throw new RuntimeException();
}
return buffer[i++];
}
String next() {
StringBuilder builder = new StringBuilder();
int b = read();
while (b < '!' || '~' < b) {
b = read();
}
while ('!' <= b && b <= '~') {
builder.appendCodePoint(b);
b = read();
}
return builder.toString();
}
String nextLine() {
StringBuilder builder = new StringBuilder();
int b = read();
while (b != 0 && b != '\r' && b != '\n') {
builder.appendCodePoint(b);
b = read();
}
if (b == '\r') {
read();
}
return builder.toString();
}
int nextInt() {
long val = nextLong();
if ((int) val != val) {
throw new NumberFormatException();
}
return (int) val;
}
long nextLong() {
int b = read();
while (b < '!' || '~' < b) {
b = read();
}
boolean neg = false;
if (b == '-') {
neg = true;
b = read();
}
long n = 0;
int c = 0;
while ('0' <= b && b <= '9') {
n = n * 10 + b - '0';
b = read();
c++;
}
if (c == 0 || c >= 2 && n == 0) {
throw new NumberFormatException();
}
return neg ? -n : n;
}
}
class In {
private final BufferedReader reader = new BufferedReader(new InputStreamReader(System.in), 0x10000);
private StringTokenizer tokenizer;
String next() {
try {
while (tokenizer == null || !tokenizer.hasMoreTokens()) {
tokenizer = new StringTokenizer(reader.readLine());
}
} catch (IOException ignored) {
}
return tokenizer.nextToken();
}
int nextInt() {
return Integer.parseInt(next());
}
long nextLong() {
return Long.parseLong(next());
}
double nextDouble() {
return Double.parseDouble(next());
}
char[] nextCharArray() {
return next().toCharArray();
}
String[] nextStringArray(int n) {
String[] s = new String[n];
for (int i = 0; i < n; i++) {
s[i] = next();
}
return s;
}
char[][] nextCharGrid(int n, int m) {
char[][] a = new char[n][m];
for (int i = 0; i < n; i++) {
a[i] = next().toCharArray();
}
return a;
}
int[] nextIntArray(int n) {
int[] a = new int[n];
for (int i = 0; i < n; i++) {
a[i] = nextInt();
}
return a;
}
int[] nextIntArray(int n, IntUnaryOperator op) {
int[] a = new int[n];
for (int i = 0; i < n; i++) {
a[i] = op.applyAsInt(nextInt());
}
return a;
}
int[][] nextIntMatrix(int h, int w) {
int[][] a = new int[h][w];
for (int i = 0; i < h; i++) {
a[i] = nextIntArray(w);
}
return a;
}
long[] nextLongArray(int n) {
long[] a = new long[n];
for (int i = 0; i < n; i++) {
a[i] = nextLong();
}
return a;
}
long[] nextLongArray(int n, LongUnaryOperator op) {
long[] a = new long[n];
for (int i = 0; i < n; i++) {
a[i] = op.applyAsLong(nextLong());
}
return a;
}
long[][] nextLongMatrix(int h, int w) {
long[][] a = new long[h][w];
for (int i = 0; i < h; i++) {
a[i] = nextLongArray(w);
}
return a;
}
List<List<Integer>> nextEdges(int n, int m, boolean directed) {
List<List<Integer>> res = new ArrayList<>();
for (int i = 0; i < n; i++) {
res.add(new ArrayList<>());
}
for (int i = 0; i < m; i++) {
int u = nextInt() - 1;
int v = nextInt() - 1;
res.get(u).add(v);
if (!directed) {
res.get(v).add(u);
}
}
return res;
}
}
class Out {
private final PrintWriter out = new PrintWriter(System.out);
private final PrintWriter err = new PrintWriter(System.err);
boolean autoFlush = false;
boolean enableDebug;
Out(boolean enableDebug) {
this.enableDebug = enableDebug;
}
void println(Object... args) {
if (args == null || args.getClass() != Object[].class) {
args = new Object[]{args};
}
out.println(Arrays.stream(args).map(obj -> {
Class<?> clazz = obj == null ? null : obj.getClass();
return clazz == Double.class ? String.format("%.10f", obj) :
clazz == byte[].class ? Arrays.toString((byte[]) obj) :
clazz == short[].class ? Arrays.toString((short[]) obj) :
clazz == int[].class ? Arrays.toString((int[]) obj) :
clazz == long[].class ? Arrays.toString((long[]) obj) :
clazz == char[].class ? Arrays.toString((char[]) obj) :
clazz == float[].class ? Arrays.toString((float[]) obj) :
clazz == double[].class ? Arrays.toString((double[]) obj) :
clazz == boolean[].class ? Arrays.toString((boolean[]) obj) :
obj instanceof Object[] ? Arrays.deepToString((Object[]) obj) :
String.valueOf(obj);
}).collect(Collectors.joining(" ")));
if (autoFlush) {
out.flush();
}
}
void debug(Object... args) {
if (!enableDebug) {
return;
}
if (args == null || args.getClass() != Object[].class) {
args = new Object[]{args};
}
err.println(Arrays.stream(args).map(obj -> {
Class<?> clazz = obj == null ? null : obj.getClass();
return clazz == Double.class ? String.format("%.10f", obj) :
clazz == byte[].class ? Arrays.toString((byte[]) obj) :
clazz == short[].class ? Arrays.toString((short[]) obj) :
clazz == int[].class ? Arrays.toString((int[]) obj) :
clazz == long[].class ? Arrays.toString((long[]) obj) :
clazz == char[].class ? Arrays.toString((char[]) obj) :
clazz == float[].class ? Arrays.toString((float[]) obj) :
clazz == double[].class ? Arrays.toString((double[]) obj) :
clazz == boolean[].class ? Arrays.toString((boolean[]) obj) :
obj instanceof Object[] ? Arrays.deepToString((Object[]) obj) :
String.valueOf(obj);
}).collect(Collectors.joining(" ")));
err.flush();
}
void println(int a) {
out.println(a);
if (autoFlush) {
out.flush();
}
}
void println(long a) {
out.println(a);
if (autoFlush) {
out.flush();
}
}
void println(double a) {
out.println(String.format("%.10f", a));
if (autoFlush) {
out.flush();
}
}
void println(String s) {
out.println(s);
if (autoFlush) {
out.flush();
}
}
void println(char[] s) {
out.println(String.valueOf(s));
if (autoFlush) {
out.flush();
}
}
void println(int[] a) {
StringJoiner joiner = new StringJoiner(" ");
for (int i : a) {
joiner.add(Integer.toString(i));
}
out.println(joiner);
if (autoFlush) {
out.flush();
}
}
void println(long[] a) {
StringJoiner joiner = new StringJoiner(" ");
for (long i : a) {
joiner.add(Long.toString(i));
}
out.println(joiner);
if (autoFlush) {
out.flush();
}
}
void flush() {
err.flush();
out.flush();
}
}
チャラ