Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
91 changes: 91 additions & 0 deletions daeun/boj1043.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,91 @@
import java.util.ArrayList;
import java.util.LinkedList;
import java.util.Queue;
import java.util.Scanner;

public class Main {

static boolean visited[];

public static void main(String[] args) {
Scanner sc= new Scanner(System.in);
int N= sc.nextInt(); //총 사람 수 (1부터)(노드 번호)
int M = sc.nextInt();//파티 수(간선 수)
int K = sc.nextInt();//진실아는 사람 수

visited = new boolean[N+1];
ArrayList<Integer>[] graph = new ArrayList[N+1];

for(int i=1; i<=N; i++) {
graph[i] = new ArrayList<>();
}

boolean[] knowT = new boolean[N+1];
for(int i=0; i<K; i++) {
int knowp = sc.nextInt();//아는 사람 번호
knowT[knowp] = true;
}


ArrayList<Integer>[] parties = new ArrayList[M];
for(int i=0; i<M; i++) {
int partynum = sc.nextInt();//각 파티마다 오는 사람 수
parties[i] = new ArrayList<>();
for(int j=0; j<partynum; j++) {
int p = sc.nextInt();
parties[i].add(p); //각 파티에 오는사람들 추가

}

for(int j =0; j<parties[i].size(); j++) {
for(int k=j+1; k<parties[i].size(); k++) {
graph[parties[i].get(j)].add(parties[i].get(k));
graph[parties[i].get(k)].add(parties[i].get(j));
}
}
}

for(int i=1; i<=N; i++) {
if(knowT[i] && !visited[i]) {
bfs(graph, i);

}
}

int cnt =0;
for(int i=0; i<M; i++) {
boolean dontknow = true;
for(int p :parties[i]) {
if(visited[p])
dontknow = false;
break;
}
if(dontknow) {

cnt++;
}
}

System.out.println(cnt);


}//main

static void bfs(ArrayList<Integer>[] graph, int num) {
Queue<Integer>q = new LinkedList<>();
q.add(num);
visited[num] = true;

while(!q.isEmpty()) {
int curr =q.poll();//현재 사람
for(int next: graph[curr]) {
if(!visited[next]) {
visited[next] = true;
q.add(next);
}
}
}

}

}
4 changes: 4 additions & 0 deletions daeun/boj1068.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@

public class boj1068 {

}
76 changes: 76 additions & 0 deletions daeun/boj1707.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,76 @@
import java.util.ArrayList;
import java.util.LinkedList;
import java.util.Queue;
import java.util.Scanner;

public class 이분그래프 {

static int visited[];
static int V, E;
static boolean isgraph;


public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int K = sc.nextInt();



for(int i=0; i<K; i++) {
isgraph = true;
V = sc.nextInt();//정점 개수(1부터 시작)
E = sc.nextInt();//간선ㄱ ㅐ수
visited = new int[V+1];
ArrayList<Integer>[] graph = new ArrayList[V+1];
for(int j=1; j<=V; j++) {
graph[j] = new ArrayList<>();
}

for(int j=0; j<E; j++) {
int num1 = sc.nextInt();
int num2 = sc.nextInt();
graph[num1].add(num2);
graph[num2].add(num1);
}

for(int k=1; k<=V; k++) {
if(visited[k]==0) {
if(!bfs(graph, k)) {
isgraph= false;
break;
}
}

}

if(isgraph)
System.out.println("YES");
else
System.out.println("NO");

}//k줄
}//main


static boolean bfs(ArrayList<Integer>[] graph, int num) {
Queue<Integer> q = new LinkedList<>();
q.add(num);
visited[num]=1;
while(!q.isEmpty()) {
int curr = q.poll();

for(int next: graph[curr]) {
if(visited[next]==0) {
visited[next] =(visited[curr]==1)? 2:1;
q.add(next);
}else if(visited[next]==visited[curr]) {
return false;
}
}
}

return true;

}

}
74 changes: 74 additions & 0 deletions daeun/boj1967.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,74 @@
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.List;
import java.util.StringTokenizer;

public class boj1967 {

static class Node {
int num;
int cost;

public Node(int num, int cost) {
this.num = num;//번호
this.cost = cost;//가중치
}


}

static boolean visited[];
static int sum;
static List<Node>[] tree;


public static void main(String[] args) throws NumberFormatException, IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int N = Integer.parseInt(br.readLine());//노드 ㅅ서

tree = new ArrayList[N+1];

for(int i=1; i<=N; i++) {
tree[i] = new ArrayList<>();
}//트리 초기화


for(int i=1; i<N; i++) {
StringTokenizer st = new StringTokenizer(br.readLine());
int start = Integer.parseInt(st.nextToken());
int end = Integer.parseInt(st.nextToken());
int cost = Integer.parseInt(st.nextToken());


tree[start].add(new Node(end, cost));
tree[end].add(new Node(start, cost));//무망향인까
}
sum =0;

for(int i=1; i<=N; i++) {
visited = new boolean[N+1];
visited[i] = true;
dfs(i,0);
}

System.out.println(sum);

}//main


static void dfs(int num, int s) {

for(Node node: tree[num]) {
if(!visited[node.num]) {
visited[node.num] = true;
dfs(node.num, s+node.cost);
}
}

sum = sum<s? s: sum;
}


}
61 changes: 61 additions & 0 deletions daeun/boj2617.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,61 @@
import java.util.ArrayList;
import java.util.LinkedList;
import java.util.Queue;
import java.util.Scanner;

public class Main {

static boolean visited[];

public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int N = sc.nextInt(); // 구슬 갯수(1부터)
int M = sc.nextInt(); // 몇번 올렸는지(=간선
ArrayList<Integer>[] heavy = new ArrayList[N+1];
ArrayList<Integer>[] light = new ArrayList[N+1];

for(int i=1; i<=N; i++){
heavy[i] = new ArrayList<>();
light[i] = new ArrayList<>();
}

for (int i = 0; i < M; i++) {
int H = sc.nextInt(); // 무거운거
int L = sc.nextInt(); // 가벼운거
heavy[H].add(L);
light[L].add(H);
}
int margino = (N + 1) / 2;
int notmiddle=0;

for (int i = 1; i <= N; i++) {
visited = new boolean[N + 1];
int hcnt = bfs(heavy, i);
int lcnt = bfs(light, i);

if (hcnt >= margino || lcnt >= margino) {
notmiddle++;
}
}
System.out.println(notmiddle);

}// main

static int bfs(ArrayList<Integer>[] list, int num) {
Queue<Integer> q = new LinkedList<>();
q.add(num);
visited[num] = true;
int cnt = 0;
while (!q.isEmpty()) {
int curr = q.poll();
cnt++;
for (int next : list[curr]) {
if (!visited[next]) {
visited[next] = true;
q.add(next);
}
}
}
return cnt-1;
}
}
Loading