Skip to content

Commit 4e795e3

Browse files
authored
Merge pull request #206 from JavaCote/sangeok
이상억 36주차
2 parents 21bb7d3 + ffe7495 commit 4e795e3

File tree

4 files changed

+256
-0
lines changed

4 files changed

+256
-0
lines changed
Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
import java.io.*;
2+
import java.util.*;
3+
4+
public class Main {
5+
6+
static int N;
7+
static int[] S, B;
8+
static int answer = Integer.MAX_VALUE;
9+
10+
static void dfs(int idx, long sour, long bitter, boolean used) {
11+
if (idx == N) {
12+
if (used) {
13+
answer = Math.min(answer, (int)Math.abs(sour - bitter));
14+
}
15+
return;
16+
}
17+
18+
// 현재 재료 사용
19+
dfs(idx + 1,
20+
sour * S[idx],
21+
bitter + B[idx],
22+
true);
23+
24+
// 현재 재료 사용 안 함
25+
dfs(idx + 1,
26+
sour,
27+
bitter,
28+
used);
29+
}
30+
31+
public static void main(String[] args) throws Exception {
32+
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
33+
N = Integer.parseInt(br.readLine());
34+
35+
S = new int[N];
36+
B = new int[N];
37+
38+
for (int i = 0; i < N; i++) {
39+
StringTokenizer st = new StringTokenizer(br.readLine());
40+
S[i] = Integer.parseInt(st.nextToken());
41+
B[i] = Integer.parseInt(st.nextToken());
42+
}
43+
44+
dfs(0, 1, 0, false);
45+
System.out.println(answer);
46+
}
47+
}
Lines changed: 104 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,104 @@
1+
import java.io.*;
2+
import java.util.*;
3+
4+
public class Main {
5+
6+
static class Edge {
7+
int to;
8+
int cost;
9+
Edge(int to, int cost) {
10+
this.to = to;
11+
this.cost = cost;
12+
}
13+
}
14+
15+
static List<Edge>[] graph;
16+
static int N;
17+
18+
public static void main(String[] args) throws IOException {
19+
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
20+
StringTokenizer st;
21+
22+
int T = Integer.parseInt(br.readLine());
23+
24+
for (int tc = 0; tc < T; tc++) {
25+
26+
st = new StringTokenizer(br.readLine());
27+
N = Integer.parseInt(st.nextToken());
28+
int M = Integer.parseInt(st.nextToken());
29+
30+
graph = new ArrayList[N + 1];
31+
for (int i = 1; i <= N; i++) {
32+
graph[i] = new ArrayList<>();
33+
}
34+
35+
for (int i = 0; i < M; i++) {
36+
st = new StringTokenizer(br.readLine());
37+
int a = Integer.parseInt(st.nextToken());
38+
int b = Integer.parseInt(st.nextToken());
39+
int c = Integer.parseInt(st.nextToken());
40+
41+
graph[a].add(new Edge(b, c));
42+
graph[b].add(new Edge(a, c));
43+
}
44+
45+
int K = Integer.parseInt(br.readLine());
46+
st = new StringTokenizer(br.readLine());
47+
48+
int[] friends = new int[K];
49+
for (int i = 0; i < K; i++) {
50+
friends[i] = Integer.parseInt(st.nextToken());
51+
}
52+
53+
int[] sum = new int[N + 1];
54+
55+
for(int f : friends){
56+
int[] dist = dijkstra(f);
57+
for(int i = 1; i <= N; i++){
58+
sum[i] += dist[i];
59+
}
60+
}
61+
62+
int answer = 1;
63+
int min = sum[1];
64+
for(int i = 2; i <= N; i++){
65+
if(sum[i] < min ){
66+
min = sum[i];
67+
answer = i;
68+
}
69+
}
70+
71+
System.out.println(answer);
72+
}
73+
}
74+
75+
static int[] dijkstra(int start) {
76+
int[] dist = new int[N + 1];
77+
Arrays.fill(dist, Integer.MAX_VALUE);
78+
dist[start] = 0;
79+
80+
PriorityQueue<int[]> pq =
81+
new PriorityQueue<>((a, b) -> Integer.compare(a[1], b[1]));
82+
83+
pq.add(new int[]{start, 0});
84+
85+
while (!pq.isEmpty()) {
86+
int[] cur = pq.poll();
87+
int now = cur[0];
88+
int cost = cur[1];
89+
90+
if (cost > dist[now]) continue;
91+
92+
for (Edge e : graph[now]) {
93+
int next = e.to;
94+
int nextCost = cost + e.cost;
95+
96+
if (nextCost < dist[next]) {
97+
dist[next] = nextCost;
98+
pq.add(new int[]{next, nextCost});
99+
}
100+
}
101+
}
102+
return dist;
103+
}
104+
}
Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,54 @@
1+
import java.io.*;
2+
import java.util.*;
3+
4+
5+
public class Main{
6+
7+
static int[] parent;
8+
9+
static int find(int x){
10+
if(parent[x] == x) return x;
11+
return parent[x] = find(parent[x]);
12+
}
13+
14+
static void union(int a, int b){
15+
a = find(a);
16+
b = find(b);
17+
if (a != b) parent[b] = a;
18+
}
19+
20+
21+
public static void main(String[] args) throws IOException{
22+
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
23+
24+
int N = Integer.parseInt(br.readLine());
25+
int M = Integer.parseInt(br.readLine());
26+
27+
parent = new int[N + 1];
28+
for(int i = 1; i <= N; i++) parent[i] = i;
29+
30+
for(int i = 1; i <= N; i ++){
31+
StringTokenizer st = new StringTokenizer(br.readLine());
32+
for(int j = 1; j <= N; j++){
33+
int connected = Integer.parseInt(st.nextToken());
34+
if(connected == 1){
35+
union(i,j);
36+
}
37+
}
38+
}
39+
40+
StringTokenizer st = new StringTokenizer(br.readLine());
41+
int first_city = Integer.parseInt(st.nextToken());
42+
int root = find(first_city);
43+
44+
while(st.hasMoreTokens()){
45+
int city = Integer.parseInt(st.nextToken());
46+
if(find(city) != root){
47+
System.out.println("NO");
48+
return;
49+
}
50+
}
51+
52+
System.out.println("YES");
53+
}
54+
}
Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
1+
import java.io.*;
2+
import java.util.*;
3+
4+
public class Main {
5+
public static void main(String[] args) throws Exception {
6+
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
7+
StringTokenizer st;
8+
9+
st = new StringTokenizer(br.readLine());
10+
int N = Integer.parseInt(st.nextToken());
11+
int K = Integer.parseInt(st.nextToken());
12+
int Q = Integer.parseInt(st.nextToken());
13+
int M = Integer.parseInt(st.nextToken());
14+
15+
boolean[] sleep = new boolean[N + 3]; // 졸고 있는 학생
16+
boolean[] attend = new boolean[N + 3]; // 출석한 학생
17+
18+
st = new StringTokenizer(br.readLine());
19+
for (int i = 0; i < K; i++) {
20+
sleep[Integer.parseInt(st.nextToken())] = true;
21+
}
22+
23+
st = new StringTokenizer(br.readLine());
24+
for (int i = 0; i < Q; i++) {
25+
int x = Integer.parseInt(st.nextToken());
26+
if (sleep[x]) continue; // 졸고 있으면 전파 X
27+
28+
for (int j = x; j <= N + 2; j += x) {
29+
if (!sleep[j]) {
30+
attend[j] = true;
31+
}
32+
}
33+
}
34+
35+
int[] prefix = new int[N + 3];
36+
for (int i = 3; i <= N + 2; i++) {
37+
prefix[i] = prefix[i - 1] + (attend[i] ? 0 : 1);
38+
}
39+
40+
StringBuilder sb = new StringBuilder();
41+
42+
for (int i = 0; i < M; i++) {
43+
st = new StringTokenizer(br.readLine());
44+
int S = Integer.parseInt(st.nextToken());
45+
int E = Integer.parseInt(st.nextToken());
46+
sb.append(prefix[E] - prefix[S - 1]).append('\n');
47+
}
48+
49+
System.out.print(sb);
50+
}
51+
}

0 commit comments

Comments
 (0)