적색 경보
15062 단어 중국 대학 MOOC-진 월하 흠 명 - 데이터 구조
입력 형식: 첫 번 째 줄 에 입력 하면 두 개의 정수 N (0 < N ≤ 500) 과 M (≤ 5000) 을 주 고 각각 도시 개수 (따라서 기본 도시 가 0 에서 N - 1 번호) 와 두 도 시 를 연결 하 는 통로 개수 입 니 다.그 다음 에 M 줄 은 각 줄 에 하나의 통로 로 연 결 된 두 도시 의 번 호 를 주 고 그 사이 에 하나의 빈 칸 으로 구분 된다.도시 정보 다음 에 점령 당 한 정보, 즉 정정 수 K 와 그 다음 에 점령 당 한 K 개 도시 의 번 호 를 제시한다.
주의: 공격 당 하 는 도시 번 호 를 입력 하 는 것 은 모두 합 법 적 이 고 중복 되 지 않 지만 제 시 된 통로 가 중복 되 지 않 는 다 는 것 을 보장 하지 않 습 니 다.
출력 형식: 모든 점령 된 도시 에 대해 국가 전체의 연결 성 을 바 꿀 수 있다 면 Red Alert: City k is lost!,그 중에서 k 는 이 도시 의 번호 이다.그렇지 않 으 면 City k is lost 만 출력 하면 됩 니 다.만약 그 나라 가 마지막 도 시 를 잃 었 다 면, 한 줄 의 수출 Game Over 를 추가 합 니 다.
입력 예시:
5 4
0 1
1 3
3 0
0 4
5
1 2 0 4 3
출력 예시:
City 1 is lost.
City 2 is lost.
Red Alert: City 0 is lost!
City 4 is lost.
City 3 is lost.
Game Over.
이 문 제 는 바로 연결 분량 에 관 한 문제 로 도시 의 연결 성의 강약 은 연결 분량 의 크기 를 통 해 반영 할 수 있다.(연결 분량 이 클 수록 전체적인 연결 성 은 낮 아진 다) 만약 에 한 도 시 를 잃 으 면 그림 에서 이 도시 와 연 결 된 구간 이 모두 끊 어 진 것 으로 나타난다. 만약 에 이 도 시 를 잃 으 면 연결 분량 이 1 만 증가한다. 즉, 이 도시 자체 에 만 영향 을 주 고 전체적인 연결 성에 영향 을 주지 않 으 면 'City x is lost' 를 수출 한다."이 도 시 를 잃 은 후 연결 분량 이 2 를 넘 으 면 전체적인 연결 성 이 영향 을 받 았 음 을 증명 하고 연결 성 이 떨 어 지면 수출" Red Alert: City x is lost! "
#include
#include
using namespace std;
int N,M;
vector<vector<int>> edges;
void DFS(int v,bool *visited)
{
visited[v]=true;
for(int j=0;j<N;j++)
{
if(!visited[j]&&edges[v][j]==1)
{
DFS(j,visited);
}
}
}
int DFSTraverse()
{
int cnt=0;
bool *visited=new bool[N];
for(int i=0;i<N;i++)
{
visited[i]=false;
}
for(int i=0;i<N;i++)
{
if(!visited[i]){
DFS(i,visited);
cnt++;
}
}
return cnt;
}
int main()
{
cin>>N>>M;
int cnt1=0,cnt2=0;
edges.resize(N);
for(int i=0;i<N;i++)
{
edges[i].resize(N);
}
for(int i=0;i<N;i++)
{
for(int j=0;j<N;j++)
{
edges[i][j]=0;
}
}
for(int i=0;i<M;i++)
{
int va,vb;
cin>>va>>vb;
edges[va][vb]=edges[vb][va]=1;
}
cnt1=DFSTraverse();
int K;
cin>>K;
for(int i=0;i<K;i++)
{
int city;
cin>>city;
for(int j=0;j<N;j++)
{
edges[city][j]=0;
edges[j][city]=0;
}
cnt2=DFSTraverse();
if(cnt2-1>cnt1) printf("Red Alert: City %d is lost!
",city);
else printf("City %d is lost.
",city);
cnt1=cnt2;
if(i==N-1) break;
}
if(K==N) printf("Game Over.
");
return 0;
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
적색 경보진급 실험 6 - 3.1 적색 경보 (25 분) 전쟁 에서 각 도시 간 의 연관 성 을 유지 하 는 것 이 중요 하 다.이 문 제 는 한 도 시 를 잃 고 국가 가 연결 되 지 않 는 여러 지역 으로 분 단 될 때 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.