
#include #include typedef struct Node{int x, y, v}Node; //간선을 담을 구조체 int find(int p[], int x) { //노드가 속한 부분집합의 대표 노드 찾기 if(p[x] == x) return x; return p[x] = find(p, p[x]); } void merge(int p[], int x, int y) { /노드들이 속한 부분집합들 합치기 x = find(p, x); y = find(p, y); if(x!=y) p[x] = y; } int main(void) { int n, i, j, cnt = 0, mst = 0; scanf("%d", &n); int p[n+1]; Node *g = (Node*) malloc(sizeof(Node) ..
#include #include typedef struct Node{int x, y, v;}Node; //간선을 담을 구조체 int find(int p[], int x) { //노드가 속한 부분집합의 대표노드 찾기 if(x == p[x]) return x; return p[x] = find(p, p[x]); } void merge(int p[], int x, int y) {// 두 노드의 부분집합 합치기 x = find(p, x); y = find(p, y); if(x!=y) p[x] = y; } int main(void) { int n, m, i, j, gap, cnt = 0; scanf("%d %d", &n, &m); Node *g = (Node*) malloc(sizeof(Node) * (n*(n-..
#include #include typedef struct Node{int x, y, v;}Node; //간선 구조체 typedef struct Pair{int y, v;}Pair; //정수형 변수 두개 묶어논 구조체 typedef struct qNode { //큐에 들어갈 구조체 Pair data; struct qNode* next; //다음 큐의 구조체를 가리킵니다. }qNode; typedef struct Queue {//큐 qNode* front; qNode* rear; int cnt; }Queue; void init(Queue* q) {//큐 초기화 q->cnt = 0; q->front = q->rear = NULL; } int isEmpty(Queue* q) {return q->cnt==0;}..
#include typedef struct Node{int x, y, v}Node; int find(int p[], int x) {//노드가 속한 부분집합의 대표노드 찾기 if(x==p[x]) return x; return p[x] = find(p, p[x]); } void merge(int p[], int x, int y) {//두 노드 각각의 부분집합들 합치지 x = find(p,x); y = find(p,y); if(x!=y) p[x]=y; //p[y]=x도 상관없습니다. } void sort(int arr[1024], int cnt) { //shell sort int i, j, key, gap = cnt/2; while(1) { if(gap%2==0) gap++; for(i=gap; i=0; j-..
#include typedef struct Node {int x,y,v}Node; //간선을 담을 구조체 int find(int p[], int x) { //노드가 속한 부분집합의 대표 노드 찾기 if(x == p[x]) return x; return p[x] = find(p, p[x]); } void merge(int p[], int x, int y) {//두 노드가 속한 부분집합들 합치기 x = find(p, x); y = find(p, y); if(x!=y) p[x] = y; } int main(void) { int n, m, i, j, gap; scanf("%d %d", &n, &m); int Up[n+1]; //최소 스패닝 트리를 위한을 위한 배열 int Down[n+1]; //최대 스패닝(?)..
#include typedef struct Node{int u, v, d}Node; //간선 구조체 int find(int p[], int x) { //노드가 속한 부분집합의 대표 노드 찾기 if(x == p[x]) return x; return p[x] = find(p, p[x]); } void merge(int p[], int x, int y) { // 두노드의 부분집합 합치기 x = find(p, x); y = find(p, y); if(x!=y) p[x] = y; } int main(void) { int n, m, i, j, gap, cnt = 0, treeCnt = 0; scanf("%d %d", &n, &m); int p[n+1]; //노드가 속한 부분집합의 대표 노드 저장 char isTre..
#include #define M 100 typedef struct Node{int x,y,v}Node; //간선을 담을 구조체 int find(int p[], int x) { //노드가 속한 부분집합의 대표노드 찾기 if(p[x] == x) return x; return p[x] = find(p, p[x]); } void merge(int p[], int x, int y) { //두 노드가 속한 부분집합들 합치기 x = find(p, x); y = find(p, y); if(x!=y) p[x] = y; } int main(void) { int n, N, sum = 0; //sum은 모든 랜선의 길이의 합 scanf("%d", &n); N = n*n; int p[n]; //노드가 속한 부분집합의 대표노드..
#include typedef struct Node{ //간선을 받을 구조체 int x; int y; int v; //가중치 }Node; int find(int p[], int x) { //노드가 속한 부분집합의 대표 노드 찾기 if(x == p[x]) return x; return p[x] = find(p, p[x]); } void merge(int p[], int x, int y) {//노드들의 부분집합 합치기 x = find(p, x); y = find(p, y); if(x!=y) p[x]=y; } int main(void) { int n; scanf("%d", &n); int N = n*n; Node g[N]; int p[n]; for(int i=0; i= 1; } long long int ans..
#include #include void sub(int n, int m); typedef struct Node{ //간선을 담을 구조체 int x; int y; int v; }Node; void shell(Node v[], int m) { //shell 정렬 int i, j, gap = m/2; Node key; while(1) { if(gap%2 == 0) gap++; for(i=gap; i=0; j-=gap) { if(key.v >= 1; } } int find(int p[], int x) { //노드가 속한 부분집합의 대표 노드 찾기 if(p[x] =..
- Total
- Today
- Yesterday
- 누적 합
- 1835번
- XOR
- DFS
- Krustal
- 최소 스패닝 트리
- 덱
- 스택
- Lazy Propagation
- Segment Tree
- 누적합
- union
- BFS
- C++
- 최대공약수
- DP
- 그리디
- C언어
- java
- 세그먼트 트리
- 그래프
- 백준
- 정렬
- 1835
- 기하학
- 오프라인 쿼리
- PASCAL
- find
- 브루트포스
- 플로이드
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |