質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
86.12%
C++11

C++11は2011年に容認されたC++のISO標準です。以前のC++03に代わるもので、中枢の言語の変更・修正、標準ライブラリの拡張・改善を加えたものです。

受付中

union find木の実装

busa145
busa145

総合スコア4

C++11

C++11は2011年に容認されたC++のISO標準です。以前のC++03に代わるもので、中枢の言語の変更・修正、標準ライブラリの拡張・改善を加えたものです。

1回答

0リアクション

0クリップ

197閲覧

投稿2022/09/23 09:22

前提

今union find木の勉強をしているのですが、コード自体は蟻本に書いているものをそのままパクってきたのですが、なぜかエラーが出ます。

発生している問題・エラーメッセージ

./Main.cpp: In function ‘void init(int)’: ./Main.cpp:10:12: error: reference to ‘rank’ is ambiguous 10 | rank[i] = 0; | ^~~~ In file included from /usr/include/c++/9/bits/move.h:55, from /usr/include/c++/9/bits/nested_exception.h:40, from /usr/include/c++/9/exception:144, from /usr/include/c++/9/ios:39, from /usr/include/c++/9/ostream:38, from /usr/include/c++/9/iostream:39, from ./Main.cpp:1: /usr/include/c++/9/type_traits:1257:12: note: candidates are: ‘template<class> struct std::rank’ 1257 | struct rank | ^~~~ ./Main.cpp:6:15: note: ‘std::vector<int> rank’ 6 | vector<int>rank(MAX_int); | ^~~~ ./Main.cpp: In function ‘void unite(int, int)’: ./Main.cpp:19:11: error: reference to ‘rank’ is ambiguous 19 | if(rank[x] <rank[y])par[x] == y; | ^~~~ In file included from /usr/include/c++/9/bits/move.h:55, from /usr/include/c++/9/bits/nested_exception.h:40, from /usr/include/c++/9/exception:144, from /usr/include/c++/9/ios:39, from /usr/include/c++/9/ostream:38, from /usr/include/c++/9/iostream:39, from ./Main.cpp:1: /usr/include/c++/9/type_traits:1257:12: note: candidates are: ‘template<class> struct std::rank’ 1257 | struct rank | ^~~~ ./Main.cpp:6:15: note: ‘std::vector<int> rank’ 6 | vector<int>rank(MAX_int); | ^~~~ ./Main.cpp:19:20: error: reference to ‘rank’ is ambiguous 19 | if(rank[x] <rank[y])par[x] == y; | ^~~~ In file included from /usr/include/c++/9/bits/move.h:55, from /usr/include/c++/9/bits/nested_exception.h:40, from /usr/include/c++/9/exception:144, from /usr/include/c++/9/ios:39, f...

該当のソースコード

c++

#include <iostream> #include<vector> using namespace std; static const int MAX_int = 100000000; vector<int>par(MAX_int); vector<int>rank(MAX_int); void init(int n){ for(int i=0;i<n;i++){ par[i] = i; rank[i] = 0; } } int find(int x){ if(par[x] == x)return x; else return par[x] == find(par[x]); } void unite(int x,int y){ x = find(x);y = find(y);if(y == x)return; if(rank[x] <rank[y])par[x] == y; else { par[y] == x; if(rank[x] == rank[y])rank[x]++; } } bool same(int x,int y){ return find[x] == find[y]; } int main(void){ int N,M;cin >> N >> M; vector<pair<int,int>>a(M); for(int i=0;i<M;i++){ cin >> a[i].first >> a[i].second; } map<int,int>b; for(int i=0;i<M;i++){ b[a[i].first-1]++;b[a[i].second-1]++; } bool ans = false; for(int i=0;i<M;i++){ if(same(a[i].first ,a[i].second))ans = true; unite(a[i].first,a[i].second); } for(int i = 0;i<N;i++){ if(b[i] > 2 || ans){ cout << "No" << endl;return 0; } } cout << "Yes" << endl; }

試したこと

補足情報(FW/ツールのバージョンなど)

int関数の中は無視してください。

以下のような質問にはリアクションをつけましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

リアクションが多い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

気になる質問をクリップする

クリップした質問は、後からいつでもマイページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

下記のような質問は推奨されていません。

  • 間違っている
  • 質問になっていない投稿
  • スパムや攻撃的な表現を用いた投稿

適切な質問に修正を依頼しましょう。

Zuishin

2022/09/23 11:58

> ./Main.cpp:10:12: error: reference to ‘rank’ is ambiguous 'rank' が曖昧。 > /usr/include/c++/9/type_traits:1257:12: note: candidates are: ‘template<class> struct std::rank’ 候補は 'template<class> struct std::rank' > ./Main.cpp:6:15: note: ‘std::vector<int> rank’ そして 'std::vector<int> rank'

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
86.12%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問

同じタグがついた質問を見る

C++11

C++11は2011年に容認されたC++のISO標準です。以前のC++03に代わるもので、中枢の言語の変更・修正、標準ライブラリの拡張・改善を加えたものです。