[17241] Pineapple Advertising, c++

2021. 2. 6. 23:44·DEV/PS

​

[17241] Pineapple Advertising

 

https://www.acmicpc.net/problem/17241

 

17241번: Pineapple Advertising

첫 줄에 N, M, Q가 주어진다. (1 ≤ N ≤ 200,000, 0 ≤ M ≤ 1,000,000) 두 번째 줄부터 M + 1번째 줄까지 ai , bi가 주어진다.(1 ≤ ai, bi ≤ N) 이는 집 ai와 집 bi가 길로 연결되어 있다는 것을 의미한다. 그 뒤 Q

www.acmicpc.net

한줄 후기 : 지금 다시 풀면 못풀듯 ? ㅋㅋ


이거 존나 빡치는 문제 ㅋㅋ

약간 나 백준에서 사람들이 많이 안 푼 문제 풀고 싶어서 난이도 골드인데도 도전했다가 뼈맞은 그런 거임

암튼..

친절하게 힌트도 있네요 ^^

친절하게 힌트도 있네요 ^^

무튼 처음에 문제 읽고 엥 이거 그냥 그래프 문제 아닌가 ? 하고 바로 코드를 짰슴다 ㅋ

//시간초과
#include <iostream>
#include <vector>
using namespace std;
vector<int> house[200001];
bool check[200001]={false};
int n,m;
int delivery(int a){
	int cnt=0;
	for(int i=0; i<house[a].size(); i++){
		int num = house[a][i];
		if(!check[num]){
			check[num] = true;
			cnt++;
		}
	}
	return cnt;
}
int main(){
	int q,idx=0;
	int count[200000];
	scanf("%d %d %d", &n, &m, &q);
	for(int i=0; i<m; i++){
		int a,b;
		scanf("%d %d", &a, &b);
		house[a].push_back(b);
		house[b].push_back(a);
	}
	for(int i=0; i<q; i++){
		int temp;
		int ans = 0;
		scanf("%d", &temp);
		ans += delivery(temp);
		if(!check[temp]){
			check[temp] = true;
			count[idx++] = ans+1;
			//printf("%d\n", ans+1);
		}
		else{
			count[idx++] = ans;
			//printf("%d", ans);
		}
	}
	for(int i=0; i<q; i++){
		printf("%d\n", count[i]);
	}
	return 0;
}

결과는 시간초과 ..

무난한 그래프 문제 처럼 vector 에 house 연결을 받아 놓고 delivery 함수를 통해 돌면서 피자를 나눠 주는 걸 체크했더니 시간초과가 납니다.

저는 이걸 풀지 못했어요 ..~ 그래서 unsolved 로 냈답니다.

wow 그랬더니 한 선배님께서 친절히 알려주셨어요 .. delivery 를 그냥 도는게 아니라 check 배열 내에 이미 피자를 좋아하는 집, 피자를 전달받아서 좋아하게 된 집 을 따로 표시하면 시간을 줄일 수 있다고 ..

그래서 고쳤습니다.

//AC
#include <iostream>
#include <vector>
using namespace std;
vector<int> house[200001];
int visit[200001] = {0};
int delivery(int start){
	int cnt = 0;
	if(visit[start] == -2)	return 0;  //이미 좋아함
	if(visit[start] == 0){
		cnt++;
		visit[start] = -2; 
	}
	for(int i=0; i<house[start].size();i++){
		int a = house[start][i];
		if(visit[a]==0){
			cnt++;
			visit[a] = -1; // 피자 전달된 집이랑 연결된 집
		}
	}
	return cnt;
}
int main(){
	int n,m,q;
	scanf("%d %d %d", &n, &m, &q);
	for(int i=0; i<m; i++){
		int a, b;
		scanf("%d %d", &a, &b);
		house[a].push_back(b);
		house[b].push_back(a);
	}
	for(int i=0; i<q; i++){
		int temp;
		scanf("%d" ,&temp);
		printf("%d\n", delivery(temp));
	}
	return 0;
}

휴.. 어려운 문제였습니다. 골드 문제는 신중히 푸는 거로 ^^

저작자표시 (새창열림)

'DEV > PS' 카테고리의 다른 글

[2110] 공유기 설치, c++  (0) 2021.02.06
[2012] 등수 매기기, c++  (0) 2021.02.06
[1699] 제곱수의 합, c++  (0) 2021.02.06
[1039] 중량 제한, c++  (0) 2021.02.06
[19542] 전단지 돌리기 - UCPC 2020 본선 A번, c++  (0) 2021.02.04
'DEV/PS' 카테고리의 다른 글
  • [2110] 공유기 설치, c++
  • [2012] 등수 매기기, c++
  • [1699] 제곱수의 합, c++
  • [1039] 중량 제한, c++
jobchae
jobchae
말하는 감자지만, 코드를 끄적이는 Node.js 백엔드 개발자입니다.
  • jobchae
    JOBCHAE
    jobchae
  • 전체
    오늘
    어제
    • 🚀 JOBCHAE (177)
      • DEV (146)
        • PS (108)
        • Node.js (12)
        • React (3)
        • docker (1)
        • 잡다한 개발 일지 (20)
        • injection (1)
        • CI CD (0)
        • JS, TS (1)
      • 축구 (0)
      • 일상 (19)
      • 영화 (3)
      • 음악 (8)
  • 블로그 메뉴

    • 💻 Github
    • 🙋🏻 Linkedin
    • 📖 방명록
  • 링크

    • PS Github
  • 공지사항

  • 인기 글

  • 태그

    GitHub
    PS
    이분탐색
    node.js
    리액트
    Express
    Nest.js
    slack
    슬랙봇
    Nest
    슬랙
    렛츠락페스티벌
    DP
    typescript
    회고
    우선순위큐
    솝트
    boj
    백준
    DFS
    BFS
    앱잼
    일상
    react
    mongoDB
    nodejs
    aws
    위상정렬
    SOPT
    알고리즘
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.0
jobchae
[17241] Pineapple Advertising, c++
상단으로

티스토리툴바