λ¬Έμ
μ¬ν κ°μ μ±κ³΅
2 μ΄ 128 MB 26240 10120 7526 37.525% λ¬Έμ
λνμ΄λ μΉκ΅¬λ€κ³Ό ν¨κ» μ¬νμ κ°λ €κ³ νλ€. νκ΅μλ λμκ° Nκ° μκ³ μμμ λ λμ μ¬μ΄μ κΈΈμ΄ μμ μλ, μμ μλ μλ€. λνμ΄μ μ¬ν μΌμ μ΄ μ£Όμ΄μ‘μ λ, μ΄ μ¬ν κ²½λ‘κ° κ°λ₯ν κ²μΈμ§ μμ보μ. λ¬Όλ‘ μ€κ°μ λ€λ₯Έ λμλ₯Ό κ²½μ ν΄μ μ¬νμ ν μλ μλ€. μλ₯Ό λ€μ΄ λμκ° 5κ° μκ³ , A-B, B-C, A-D, B-D, E-Aμ κΈΈμ΄ μκ³ , λνμ΄μ μ¬ν κ³νμ΄ E C B C D λΌλ©΄ E-A-B-C-B-C-B-DλΌλ μ¬νκ²½λ‘λ₯Ό ν΅ν΄ λͺ©μ μ λ¬μ±ν μ μλ€.
λμλ€μ κ°μμ λμλ€ κ°μ μ°κ²° μ¬λΆκ° μ£Όμ΄μ Έ μκ³ , λνμ΄μ μ¬ν κ³νμ μν λμλ€μ΄ μμλλ‘ μ£Όμ΄μ‘μ λ κ°λ₯νμ§ μ¬λΆλ₯Ό νλ³νλ νλ‘κ·Έλ¨μ μμ±νμμ€. κ°μ λμλ₯Ό μ¬λ¬ λ² λ°©λ¬Ένλ κ²λ κ°λ₯νλ€.
μ λ ₯
첫 μ€μ λμμ μ Nμ΄ μ£Όμ΄μ§λ€. Nμ 200μ΄νμ΄λ€. λμ§Έ μ€μ μ¬ν κ³νμ μν λμλ€μ μ Mμ΄ μ£Όμ΄μ§λ€. Mμ 1000μ΄νμ΄λ€. λ€μ Nκ°μ μ€μλ Nκ°μ μ μκ° μ£Όμ΄μ§λ€. iλ²μ§Έ μ€μ jλ²μ§Έ μλ iλ² λμμ jλ² λμμ μ°κ²° μ 보λ₯Ό μλ―Ένλ€. 1μ΄λ©΄ μ°κ²°λ κ²μ΄κ³ 0μ΄λ©΄ μ°κ²°μ΄ λμ§ μμ κ²μ΄λ€. Aμ Bκ° μ°κ²°λμμΌλ©΄ Bμ Aλ μ°κ²°λμ΄ μλ€. λ§μ§λ§ μ€μλ μ¬ν κ³νμ΄ μ£Όμ΄μ§λ€. λμμ λ²νΈλ 1λΆν° NκΉμ§ μ°¨λ‘λλ‘ λ§€κ²¨μ Έ μλ€.
μΆλ ₯
첫 μ€μ κ°λ₯νλ©΄ YES λΆκ°λ₯νλ©΄ NOλ₯Ό μΆλ ₯νλ€.
μμ μ λ ₯ 1 볡μ¬
3 3 0 1 0 1 0 1 0 1 0 1 2 3
μμ μΆλ ₯ 1 볡μ¬
YESβ
νμ΄
λμλΌλ¦¬ μ°κ²°λμ΄ μλμ§λ§ νμ νλ©΄ λλ λ¬Έμ μ΄λ€.
λͺ¨λ λ Έλμμ νμμ ν μλ μμ§λ§, μ΄λ κ² λλ©΄ λ Έλμ κ°μ N, κ°μ μκ°μ Mμ΄λΌ νμλ (NM)^2κ° λκΈ° λλ¬Έμ μκ°μ΄κ³Όκ° λ κ²μ΄λ€.
κ·Έλ¬λ―λ‘ μ΄ λ¬Έμ λ disjoint-setμΌλ‘ νμ΄μΌ λλ€.
μ΄μ²νΌ μ°κ²°λμ΄μλμ§λ§ νμ νλ©΄ λκΈ° λλ¬Έμ΄λ€.
λ Έλκ° 200κ°λ°μ μλκΈ° λλ¬Έμ μ΄μ°¨μ λ°°μ΄λ‘ κ·Έλνλ₯Ό λ§λ€μ΄μ£Όκ³
int graph[201][201];
λͺ¨λ λ Έλμ κ°μ μ νλ²μ© νμ ν΄μ£Όλ©΄μ λ Έλμ λ²νΈκ° μμκ²μ΄ λΆλͺ¨λ Έλκ° λκ² μ΄κΈ°ν ν΄μ€λ€.
κ·Έλ κ² νκΈ°μν΄ intν λ°°μ΄ νλλ₯Ό λ§λ€μ΄μ λ Έλλ²νΈμ ν΄λΉνλ μ«μλ₯Ό λ£μ΄μ£Όκ³
vector<int>v(201);
for(int i=1; i<=N; i++)
v[i] = i;
νλ² κ°±μ ν΄μ€λλ§λ€ λͺ¨λ λ Έλλ₯Ό λμμ£Όλ©΄μ μμλ Έλλ‘ λ€μ΄κ° λ Έλκ° λΆλͺ¨λ ΈλμΈ κ²½μ°λ₯Ό μ λΆ κ°±μ ν΄μ€λ€.
for(int i=1; i<=N; i++)
for(int j=1; j<=N; j++){
if(i == j) continue;
if(graph[i][j] == 0) continue;
if(v[i] == v[j]) continue;
int parent = min(v[i],v[j]);
int child = max(v[i],v[j]);
for(int k = 1; k<=N; k++){
if(v[k] != child) continue;
v[k] = parent;
}
}
κ·Έλ¬λ©΄ disjoint-setμ΄ μκΈ°κΈ° λλ¬Έμ, μ¬νλ€λ μ§μμ μμλλ‘ λ³΄λ©΄μ λΆλͺ¨λ Έλκ° λ€ κ°μΌλ©΄ yes, νλλΌλ λ€λ₯΄λ©΄ noλ₯Ό μΆλ ₯νλ©΄ λλ€.
μ 체 μ½λ
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
vector<int>v(201);
vector<int>trip;
int graph[201][201];
int N,M,ans=1;
int main(){
cin>>N>>M;
for(int i=1; i<=N; i++)
for(int j=1; j<=N; j++){
cin>>graph[i][j];
}
for(int i=0; i<M; i++){
int input;
cin>>input;
trip.push_back(input);
}
for(int i=1; i<=N; i++)
v[i] = i;
for(int i=1; i<=N; i++)
for(int j=1; j<=N; j++){
if(i == j) continue;
if(graph[i][j] == 0) continue;
if(v[i] == v[j]) continue;
int parent = min(v[i],v[j]);
int child = max(v[i],v[j]);
for(int k = 1; k<=N; k++){
if(v[k] != child) continue;
v[k] = parent;
}
}
int check = 0;
for(auto t : trip){
if(check == 0)
check = v[t];
else{
if(check != v[t]){
ans = 0;
break;
}
}
}
if(ans == 1)
cout<<"YES";
else
cout<<"NO";
}