結果
問題 | No.1983 [Cherry 4th Tune C] 南の島のマーメイド |
ユーザー | ArcAki |
提出日時 | 2024-08-13 02:03:07 |
言語 | Rust (1.77.0 + proconio) |
結果 |
WA
|
実行時間 | - |
コード長 | 3,119 bytes |
コンパイル時間 | 18,870 ms |
コンパイル使用メモリ | 378,188 KB |
実行使用メモリ | 29,484 KB |
最終ジャッジ日時 | 2024-08-13 02:03:42 |
合計ジャッジ時間 | 27,845 ms |
ジャッジサーバーID (参考情報) |
judge4 / judge5 |
(要ログイン)
テストケース
テストケース表示入力 | 結果 | 実行時間 実行使用メモリ |
---|---|---|
testcase_00 | AC | 1 ms
5,248 KB |
testcase_01 | AC | 2 ms
5,248 KB |
testcase_02 | AC | 2 ms
5,376 KB |
testcase_03 | AC | 2 ms
5,376 KB |
testcase_04 | AC | 1 ms
5,376 KB |
testcase_05 | AC | 2 ms
5,376 KB |
testcase_06 | AC | 2 ms
5,376 KB |
testcase_07 | AC | 2 ms
5,376 KB |
testcase_08 | AC | 11 ms
5,376 KB |
testcase_09 | AC | 15 ms
5,376 KB |
testcase_10 | AC | 11 ms
5,376 KB |
testcase_11 | AC | 16 ms
5,376 KB |
testcase_12 | AC | 57 ms
5,376 KB |
testcase_13 | AC | 308 ms
15,104 KB |
testcase_14 | AC | 299 ms
16,640 KB |
testcase_15 | AC | 324 ms
20,928 KB |
testcase_16 | AC | 202 ms
15,092 KB |
testcase_17 | AC | 335 ms
17,024 KB |
testcase_18 | AC | 285 ms
20,856 KB |
testcase_19 | AC | 224 ms
23,652 KB |
testcase_20 | AC | 245 ms
19,624 KB |
testcase_21 | WA | - |
testcase_22 | AC | 292 ms
20,056 KB |
testcase_23 | AC | 374 ms
26,288 KB |
testcase_24 | AC | 371 ms
26,368 KB |
testcase_25 | AC | 365 ms
26,240 KB |
testcase_26 | AC | 377 ms
26,240 KB |
testcase_27 | AC | 365 ms
26,240 KB |
testcase_28 | AC | 382 ms
26,364 KB |
testcase_29 | WA | - |
testcase_30 | AC | 392 ms
26,304 KB |
testcase_31 | AC | 424 ms
26,240 KB |
testcase_32 | AC | 431 ms
26,240 KB |
testcase_33 | AC | 1 ms
5,376 KB |
testcase_34 | AC | 352 ms
14,708 KB |
testcase_35 | AC | 327 ms
26,092 KB |
testcase_36 | AC | 331 ms
26,112 KB |
testcase_37 | AC | 1 ms
5,376 KB |
testcase_38 | WA | - |
testcase_39 | AC | 343 ms
26,240 KB |
testcase_40 | AC | 347 ms
29,484 KB |
コンパイルメッセージ
warning: field `n` is never read --> src/main.rs:7:5 | 6 | struct UnionFind{ | --------- field in this struct 7 | n: usize, | ^ | = note: `#[warn(dead_code)]` on by default
ソースコード
use std::collections::VecDeque; use std::mem::swap; use std::io::{self, BufRead}; //use proconio::input; struct UnionFind{ n: usize, parent: Vec<usize>, num: Vec<i64>, } impl UnionFind{ fn new(n: usize)->Self{ let mut parent = Vec::new(); for i in 0..n{ parent.push(i); } let num = vec![1; n]; UnionFind{ n, parent, num, } } fn find(&mut self, x: usize)->usize{ if x==self.parent[x]{return x;} self.parent[x] = self.find(self.parent[x]); self.parent[x] } fn union(&mut self, u: usize, v: usize){ let (mut pu, mut pv) = (self.find(u), self.find(v)); if pu==pv{return;} if self.num[pu] < self.num[pv]{ swap(&mut pu, &mut pv); } self.num[pu] += self.num[pv]; self.parent[pv] = pu; } fn same(&mut self, u: usize, v: usize)->bool{ self.find(u)==self.find(v) } } fn main(){ //input! { // n: usize, m: usize, q: usize, // e: [(usize, usize); m], // query: [(usize, usize); q] //} //ここからの入力はgptです…やりたいことはただ以上のようなものです。 let stdin = io::stdin(); let mut iterator = stdin.lock().lines(); let first_line = iterator.next().unwrap().unwrap(); let mut iter = first_line.split_whitespace(); let n: usize = iter.next().unwrap().parse().unwrap(); let m: usize = iter.next().unwrap().parse().unwrap(); let q: usize = iter.next().unwrap().parse().unwrap(); let mut e = Vec::with_capacity(m); for _ in 0..m { let line = iterator.next().unwrap().unwrap(); let mut iter = line.split_whitespace(); let u: usize = iter.next().unwrap().parse().unwrap(); let v: usize = iter.next().unwrap().parse().unwrap(); e.push((u, v)); } let mut query = Vec::with_capacity(q); for _ in 0..q { let line = iterator.next().unwrap().unwrap(); let mut iter = line.split_whitespace(); let u: usize = iter.next().unwrap().parse().unwrap(); let v: usize = iter.next().unwrap().parse().unwrap(); query.push((u, v)); } //↑ここまでの入力はgptです… let mut uf = UnionFind::new(n); let mut edge = vec![Vec::new(); n]; let mut cnt = vec![0; n]; for &(u, v) in &e{ edge[u-1].push(v-1); edge[v-1].push(u-1); cnt[u-1] += 1; cnt[v-1] += 1; } let mut stack = VecDeque::new(); let mut used = vec![false; n]; for i in 0..n{ if cnt[i] <= 1{ stack.push_back(i); } } while let Some(p) = stack.pop_front(){ if used[p]{continue} used[p] = true; for &nex in &edge[p]{ if used[nex]{continue} cnt[nex] -= 1; uf.union(p, nex); if cnt[nex] <= 1{ stack.push_back(nex); } } } for &(u, v) in &query{ if uf.same(u-1, v-1){ println!("Yes"); } else { println!("No"); } } }