| ||||||||||
| Online Judge | Problem Set | Authors | Online Contests | User | ||||||
|---|---|---|---|---|---|---|---|---|---|---|
| Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest | |||||||||
0ms,用了一堆stl,数据弱的很啊,vector王记清零嚷昂2次醉了。。。#include <iostream>
#include <stdio.h>
#include <bitset>
#include <vector>
using namespace std;
struct cond{
int type;//只取2,3,4
int subtype;//只对type=3有效
int sibNo1, sibNo2;
bitset<1001> constBit;
};
bitset<1001> bs[110];
vector<cond> conds[110];
int n,m;
void init(){
for(int i = 1; i <= m; i++) bs[i].reset();
for(int i = 1; i <= m; i++) conds[i].clear();
}
int main() {
int t;
scanf("%d", &t);
for(int ii = 0; ii < t; ii++){
scanf("%d%d", &n, &m);
init();
for(int chd = 1; chd <= m; chd++){
int id, gs;
scanf("%d%d", &id, &gs);
for(int j = 0; j < gs; j++){
int type;
scanf("%d", &type);
switch(type){
case -1:{
int ggs;
scanf("%d", &ggs);
bitset<1001> tempBs;
tempBs.reset();
for(int k = 0; k < ggs; k++){
int temp;
scanf("%d", &temp);
tempBs.set(temp);
}
bs[id] |= tempBs;
break;
}
case -2:{
cond tmpc;
tmpc.type = 2;
int sib;
scanf("%d", &sib);
tmpc.sibNo1 = sib;
conds[id].push_back(tmpc);
break;
}
case -3:{
bitset<1001> b[2];
b[0].reset(), b[1].reset();
int sibs[2];
int numB = 0, numS = 0;
int tag;
scanf("%d", &tag);
if(tag == -1){
numB++;
int gss;
scanf("%d", &gss);
for(int k = 0; k < gss; k++){
int tmmp;
scanf("%d", &tmmp);
b[0].set(tmmp);
}
}
else{
numS++;
scanf("%d", &sibs[0]);
}
scanf("%d", &tag);
if(tag == -1){
int gss;
scanf("%d", &gss);
for(int k = 0; k < gss; k++){
int tmmp;
scanf("%d", &tmmp);
b[numB].set(tmmp);
}
numB++;
}
else{
scanf("%d", &sibs[numS]);
numS++;
}
if(numB == 2){
bs[id] |= (b[0] & b[1]);
}
else{
cond tmpc;
tmpc.type = 3;
if(numB == 1){
tmpc.subtype = 0;
tmpc.sibNo1 = sibs[0];
tmpc.constBit = b[0];
}
else{
tmpc.subtype = 1;
tmpc.sibNo1 = sibs[0];
tmpc.sibNo2 = sibs[1];
}
conds[id].push_back(tmpc);
}
break;
}
case -4:{
int fei, sib;
scanf("%d%d", &fei, &sib);
cond tmpc;
tmpc.constBit.reset();
for(int jj = 1; jj <= n; jj++) tmpc.constBit.set(jj);
tmpc.type = 4;
tmpc.sibNo1 = sib;
scanf("%d%d", &fei, &sib);
for(int k = 0; k < sib; k++){
int tp;
scanf("%d", &tp);
tmpc.constBit.reset(tp);
}
conds[id].push_back(tmpc);
break;
}
default:
break;
}
}
}
while(1){
bool gb = 0;
for(int i = 1; i <= m; i++){
bitset<1001> btemp = bs[i];
int sz = conds[i].size();
for(int j = 0; j < sz; j++){
cond &c = conds[i][j];
if(c.type == 2) btemp |= bs[c.sibNo1];
else if(c.type == 4) btemp |= (bs[c.sibNo1] & c.constBit);
else if(c.subtype == 0) btemp |= (bs[c.sibNo1] & c.constBit);
else btemp |= (bs[c.sibNo1] & bs[c.sibNo2]);
}
if(btemp.count() > bs[i].count()){
gb = 1;
bs[i] = btemp;
}
}
if(!gb) break;
}
for(int i = 1; i <= m; i++){
printf("%d", i);
for(int j = 1; j <= n; j++){
if(bs[i][j]) printf(" %d", j);
}
printf("\n");
}
}
return 0;
}
Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator